您的位置:  首页 » Python » 爬虫蜘蛛Scrapy编写自己的蜘蛛中间件SPIDER_MIDDLEWARES(60)python Scrapy教程1.51以上版本

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

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

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

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

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

参数:
  • responseResponseobject) – 正在处理的响应
  • spiderSpiderobject) – 此响应所针对的蜘蛛
process_spider_output响应结果蜘蛛
在处理响应之后,使用Spider返回的结果调用此方法。

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

参数:
  • responseResponseobject) – 从蜘蛛生成此输出的响应
  • 结果(可迭代的Request,dict或Item对象) – 蜘蛛返回的结果
  • spiderSpiderobject) – 正在处理其结果的蜘蛛
process_spider_exception响应异常蜘蛛
当蜘蛛或process_spider_input() 方法(来自其他蜘蛛中间件)引发异常时,将调用此方法。

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

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

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

参数:
  • responseResponseobject) – 引发异常时正在处理的响应
  • exception异常对象) – 引发的异常
  • spiderSpiderobject) – 引发异常的蜘蛛
process_start_requestsstart_requestsspider 

0.15版本的新功能。

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

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

注意

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

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

参数: crawlerCrawlerobject) – 使用此中间件的爬网程序

发表评论

电子邮件地址不会被公开。 必填项已用*标注