【问题标题】:How to pass response to a spider without fetching a web page?如何在不获取网页的情况下将响应传递给蜘蛛?
【发布时间】:2016-08-18 03:52:42
【问题描述】:

The scrapy documentation 特别提到如果我想将响应传递给蜘蛛而不实际获取网页,我应该使用下载器中间件。但是,我找不到任何有关如何实现此功能的文档或示例。

我有兴趣仅将 url 传递给请求回调,使用 url(及其某些排列)填充项目的 file_urls 字段,并使用 FilesPipeline 处理实际下载。

如何编写一个将 url 传递给蜘蛛的下载器中间件类,同时避免下载网页?

【问题讨论】:

    标签: scrapy


    【解决方案1】:

    您可以在下载器中间件的process_request() 方法中返回Response 对象。每次你的蜘蛛产生的请求都会调用这个方法。

    类似:

    class NoDownloadMiddleware(object):
        def process_request(self, request, spider):
            # only process marked requests
            if not request.meta.get('only_download'):
                return
            # now make Response object however you wish
            response = Response(request.url)
            return response
    

    在你的蜘蛛中:

    def parse(self, response):
        yield Request(some_url, meta={'only_download':True})
    

    并在您的settings.py 中激活中间件:

    DOWNLOADER_MIDDLEWARES = {
        'myproject.middlewares.NoDownloadMiddleware': 543,
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-19
      • 1970-01-01
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多