python - scrapy下载器中间件
怪我咯
怪我咯 2017-04-18 09:34:48
[Python讨论组]

需要用scrapy爬取执行js后的网页。
部分scrapy代码:

spider.py:

class Myspider(Spider):
    name = 'myspider'
    start_url = [....]
    ...
    
    def parse(self, response):
    """
    解析文章列表
    """
        urls = response.xpath(....)
        for url in urls:
            request = Request(url=url, callback=self.parse_post, dont_filter=True)
            yield request
    
    
    def parse_post(self, response):
    """
    解析正文
    """
    item = myItem()
    ...

middleware.py:

class PhantomJSMiddleware(object):
    @classmethod
    def process_request(cls, request, spider):

        if request.meta.has_key('PhantomJS'):
            try:
                driver = webdriver.PhantomJS()  # 可能需要指定路径
                driver.get(request.url)
                content = driver.page_source.encode('utf-8')
                url = driver.current_url.encode('utf-8')
                driver.quit()
                return HtmlResponse(url, encoding='utf-8', body=content, request=request)
            except Exception as e:
                log.msg('PhantomJS Exception: ' + str(e), level=log.WARNING)
                return HtmlResponse(request.url, encoding='utf-8', status=503, body='')

我遇到的问题是:爬虫进入下载器中间件,返回HtmlResponse后,不会再进入解析正文的parse_post函数;但是如果不添加下载器中间件,就可以正常解析正文。
请问下载器中间件该如何编写,才能让返回的response进入parse_post函数

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(1)
高洛峰

貌似没有在Response.meta中设置PhantomJS, 所以你的process_request中的if分支没有走到?动态加载JS我推荐splash

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号