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

class scrapy.spidermiddlewares.SpiderMiddleware
process_spider_input(responsespider)
对于通过蜘蛛中间件并进入蜘蛛的每个响应,都会调用此方法进行处理。

process_spider_input()应该返回None或提出异常。

如果它返回NoneScrapy将继续处理此响应,执行所有其他中间件,直到最后,响应被传递给蜘蛛进行处理。

如果它引发异常,Scrapy将不会打扰任何其他蜘蛛中间件process_spider_input(),并将调用请求errback。errback的输出被链接回另一个方向process_spider_output()以便处理它,或者process_spider_exception()它是否引发异常。

参数:
process_spider_output(responseresultspider)
在处理响应之后,使用Spider返回的结果调用此方法。

process_spider_output()必须返回一个可迭代的 Request,dict或Item 对象。

参数:
  • response(Response object – 从蜘蛛生成此输出的响应
  • result (an iterable of Request objects and item objects) – 蜘蛛返回的结果
  • spider(Spider object)  – 正在处理其结果的蜘蛛
process_spider_exception(responseresultspider)
当蜘蛛或process_spider_input() 方法(来自其他蜘蛛中间件)引发异常时,将调用此方法。

process_spider_exception()应返回None或者是可迭代Request,dict或 Item对象。

如果它返回NoneScrapy将继续处理此异常,执行process_spider_exception()以下中间件组件中的任何其他组件,直到没有剩余中间件组件并且异常到达引擎(它被记录并丢弃)。

如果它返回一个iterable,则process_spider_output()管道启动,并且不会process_spider_exception()调用其他管道。

参数:
  • response(Response object)  – 引发异常时正在处理的响应
  • exception(Exception object)  – 引发的异常
  • spider(Spider object)  – 引发异常的蜘蛛
process_start_requests(start_requestsspider)

0.15版本的新功能。

使用spider的启动请求调用此方法,并且该process_spider_output()方法与该方法的工作方式类似,不同之处在于它没有关联的响应,并且必须仅返回请求(而不是项目)。

它接收一个iterable(在start_requests参数中)并且必须返回另一个可迭代Request对象。

注意

在您的蜘蛛中间件中实现此方法时,您应该始终返回一个iterable(在输入之后)并且不消耗所有start_requests迭代器,因为它可能非常大(甚至无限制)并导致内存溢出。Scrapy引擎设计用于在有能力处理它们的情况下提取启动请求,因此启动请求迭代器可以在有一些其他条件停止蜘蛛(如时间限制或项目/页数)时有效。

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

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

评论被关闭。