爬虫蜘蛛Scrapy编写自己的蜘蛛中间件SPIDER_MIDDLEWARES(60)python Scrapy教程1.51以上版本
每个中间件组件都是一个Python类,它定义了以下一个或多个方法:
- class
scrapy.spidermiddlewares.
SpiderMiddleware
-
responseprocess_spider_input(
spider,
)
- 对于通过蜘蛛中间件并进入蜘蛛的每个响应,都会调用此方法进行处理。
process_spider_input()
应该返回None
或提出异常。如果它返回
None
,Scrapy将继续处理此响应,执行所有其他中间件,直到最后,响应被传递给蜘蛛进行处理。如果它引发异常,Scrapy将不会打扰任何其他蜘蛛中间件
process_spider_input()
,并将调用请求errback。errback的输出被链接回另一个方向process_spider_output()
以便处理它,或者process_spider_exception()
它是否引发异常。参数:
responseprocess_spider_output(
result,
spider,
)
- 在处理响应之后,使用Spider返回的结果调用此方法。
process_spider_output()
必须返回一个可迭代的Request
,dict或Item
对象。参数:
responseprocess_spider_exception(
result,
spider,
)
- 当蜘蛛或
process_spider_input()
方法(来自其他蜘蛛中间件)引发异常时,将调用此方法。process_spider_exception()
应返回None
或者是可迭代的Request
,dict或Item
对象。如果它返回
None
,Scrapy将继续处理此异常,执行process_spider_exception()
以下中间件组件中的任何其他组件,直到没有剩余中间件组件并且异常到达引擎(它被记录并丢弃)。如果它返回一个iterable,则
process_spider_output()
管道启动,并且不会process_spider_exception()
调用其他管道。参数: - response(
Response
object) – 引发异常时正在处理的响应 - exception(
Exception
object) – 引发的异常 - spider(
Spider
object) – 引发异常的蜘蛛
- response(
start_requestsprocess_start_requests(
spider,
)
-
0.15版本的新功能。
使用spider的启动请求调用此方法,并且该
process_spider_output()
方法与该方法的工作方式类似,不同之处在于它没有关联的响应,并且必须仅返回请求(而不是项目)。它接收一个iterable(在
start_requests
参数中)并且必须返回另一个可迭代的Request
对象。注意
在您的蜘蛛中间件中实现此方法时,您应该始终返回一个iterable(在输入之后)并且不消耗所有
start_requests
迭代器,因为它可能非常大(甚至无限制)并导致内存溢出。Scrapy引擎设计用于在有能力处理它们的情况下提取启动请求,因此启动请求迭代器可以在有一些其他条件停止蜘蛛(如时间限制或项目/页数)时有效。参数: - start_requests(an iterable of
Request
) – 开始请求 - spider(
Spider
object) – 启动请求所属的蜘蛛
- start_requests(an iterable of
clsfrom_crawler(
crawler,
)
- 如果存在,则调用此类方法以从a创建中间件实例
Crawler
。它必须返回一个新的中间件实例。Crawler对象提供对所有Scrapy核心组件的访问,如设置和信号; 它是中间件访问它们并将其功能挂钩到Scrapy的一种方式。参数: crawler( Crawler
object)– 使用此中间件的爬网程序
评论被关闭。