每个中间件组件都是一个Python类,它定义了以下一个或多个方法:

class scrapy.downloadermiddlewares.DownloaderMiddleware

注意

任何下载器中间件方法也可能返回延迟。

process_request(requestspider)
对于通过下载中间件的每个请求,都会调用此方法。

process_request()应该:返回None,返回一个 Response对象,返回一个Request 对象,或者提升IgnoreRequest

如果它返回NoneScrapy将继续处理此请求,执行所有其他中间件,直到最后,相应的下载程序处理程序被称为执行的请求(并且其响应已下载)。

如果它返回一个Response对象,Scrapy将不会打扰任何其他process_request()process_exception()方法,或适当的下载功能; 它会回复那个回应。process_response() 安装中间件的方法总是在每个响应上调用

如果它返回一个Request对象,Scrapy将停止调用process_request方法并重新安排返回的请求。执行新返回的请求后,将在下载的响应上调用相应的中间件链。

如果它引发IgnoreRequest异常,将process_exception()调用已安装的下载中间件的 方法。如果它们都不处理异常,Request.errback则调用request()的errback函数。如果没有代码处理引发的异常,则会忽略它并且不会记录(与其他异常不同)。

参数:
  • request(Request object) – 正在处理的请求
  • spider(Spider object) – 此请求所针对的蜘蛛
process_response(requestresponsespider)
process_response()应该:返回一个Response 对象,返回一个Request对象或引发一个IgnoreRequest异常。

如果它返回a Response(它可能是相同的给定响应,或者是全新的响应),则该响应将继续与process_response()链中的下一个中间件一起处理。

如果它返回一个Request对象,则暂停中间件链,并重新安排返回的请求以便将来下载。这与从中返回请求的行为相同process_request()

如果它引发IgnoreRequest异常,Request.errback则调用request()的errback函数。如果没有代码处理引发的异常,则会忽略它并且不会记录(与其他异常不同)。

参数:
  • request (is a Request object) – 发起响应的请求
  • response(Response object)  – 正在处理的响应
  • spider (Spider object) – 此响应所针对的蜘蛛
process_exception(requestexceptionspider)
process_exception()下载处理程序或process_request()(从下载中间件)引发异常(包括IgnoreRequest异常)时Scrapy调用

process_exception()应该返回:要么None,一个Response对象或Request对象。

如果它返回None,Scrapy将继续处理此异常,执行任何其他process_exception()已安装的中间件方法,直到没有剩下中间件并且默认异常处理开始。

如果它返回一个Response对象,process_response() 则启动已安装的中间件的方法链,并且Scrapy不会打扰调用任何其他process_exception()中间件方法。

如果它返回一个Request对象,则重新安排返回的请求以便将来下载。这会停止执行process_exception()中间件的方法,就像返回响应一样。

参数:
  • request(is a Request object)  – 生成异常的请求
  • exception(an Exception object)  – 引发的异常
  • spider(Spider object)  – 此请求所针对的蜘蛛
from_crawler(clscrawler)
如果存在,则调用此类方法以从a创建中间件实例Crawler。它必须返回一个新的中间件实例。Crawler对象提供对所有Scrapy核心组件的访问,如设置和信号; 它是中间件访问它们并将其功能挂钩到Scrapy的一种方式。

参数: crawler(Crawler object) – 使用此中间件的爬网程序

评论被关闭。