爬虫蜘蛛Scrapy编写自己的下载中间件DOWNLOADER_MIDDLEWARES(57)python Scrapy教程1.51以上版本
每个中间件组件都是一个Python类,它定义了以下一个或多个方法:
- class
scrapy.downloadermiddlewares.
DownloaderMiddleware
-
注意
任何下载器中间件方法也可能返回延迟。
requestprocess_request(
spider,
)
- 对于通过下载中间件的每个请求,都会调用此方法。
process_request()
应该:返回None
,返回一个Response
对象,返回一个Request
对象,或者提升IgnoreRequest
。如果它返回
None
,Scrapy将继续处理此请求,执行所有其他中间件,直到最后,相应的下载程序处理程序被称为执行的请求(并且其响应已下载)。如果它返回一个
Response
对象,Scrapy将不会打扰任何其他process_request()
或process_exception()
方法,或适当的下载功能; 它会回复那个回应。process_response()
安装中间件的方法总是在每个响应上调用。如果它返回一个
Request
对象,Scrapy将停止调用process_request方法并重新安排返回的请求。执行新返回的请求后,将在下载的响应上调用相应的中间件链。如果它引发
IgnoreRequest
异常,将process_exception()
调用已安装的下载中间件的 方法。如果它们都不处理异常,Request.errback
则调用request()的errback函数。如果没有代码处理引发的异常,则会忽略它并且不会记录(与其他异常不同)。参数:
requestprocess_response(
response,
spider,
)
process_response()
应该:返回一个Response
对象,返回一个Request
对象或引发一个IgnoreRequest
异常。如果它返回a
Response
(它可能是相同的给定响应,或者是全新的响应),则该响应将继续与process_response()
链中的下一个中间件一起处理。如果它返回一个
Request
对象,则暂停中间件链,并重新安排返回的请求以便将来下载。这与从中返回请求的行为相同process_request()
。如果它引发
IgnoreRequest
异常,Request.errback
则调用request()的errback函数。如果没有代码处理引发的异常,则会忽略它并且不会记录(与其他异常不同)。参数:
requestprocess_exception(
exception,
spider,
)
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) – 此请求所针对的蜘蛛
- request(is a
clsfrom_crawler(
crawler,
)
- 如果存在,则调用此类方法以从a创建中间件实例
Crawler
。它必须返回一个新的中间件实例。Crawler对象提供对所有Scrapy核心组件的访问,如设置和信号; 它是中间件访问它们并将其功能挂钩到Scrapy的一种方式。参数: crawler( Crawler
object) – 使用此中间件的爬网程序
评论被关闭。