如何在不抓取网页的情况下将响应传递给蜘蛛?

时间:2016-08-17 14:39:28

标签: scrapy

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

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

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

1 个答案:

答案 0 :(得分:1)

您可以在下载程序中间件的Response方法中返回process_request()个对象。为蜘蛛产生的每个请求调用此方法。

类似的东西:

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,
}