编写自己的蜘蛛中间件¶每个蜘蛛中间件都是一个python类,它定义了下面定义的一个或多个方法。 主要入口点是 from_crawler 类方法,它接收 Crawler 实例。这个 Crawler 例如,对象允许您访问 settings . - classscrapy.spidermiddlewares.SpiderMiddleware¶
- process_spider_input(response, spider)¶
对于通过蜘蛛中间件进入蜘蛛进行处理的每个响应,都会调用此方法。 process_spider_input() 应该返回 None 或者提出例外。
如果它回来 None ,scrapy将继续处理此响应,执行所有其他中间软件,直到最后将响应提交给spider进行处理。 如果它引发了一个异常,那么Scrapy就不会麻烦调用任何其他的蜘蛛中间件了。 process_spider_input() 如果有请求,将调用errback,否则将启动 process_spider_exception() 链条。errback的输出被链接回另一个方向 process_spider_output() 处理,或 process_spider_exception() 如果它引发了一个异常。 - 参数
- process_spider_output(response, result, spider)¶
在处理完响应后,调用此方法,并返回蜘蛛返回的结果。 process_spider_output() 必须返回一个可迭代的 Request 对象和 item object 。
- 参数
response (Response object) -- 从spider生成此输出的响应 result (an iterable of Request objects and item object) -- 蜘蛛返回的结果 spider (Spider object) -- 正在处理结果的蜘蛛
- process_spider_exception(response, exception, spider)¶
当蜘蛛或 process_spider_output() 方法(来自以前的蜘蛛中间件)引发异常。 process_spider_exception() 应该返回 None 或可迭代的 Request 或 item 对象。
如果它回来 None ,Scrapy将继续处理此异常,执行任何其他 process_spider_exception() 在下面的中间件组件中,直到没有中间件组件离开并且异常到达引擎(在那里记录并丢弃它)。 如果它返回一个不可数 process_spider_output() 管道启动,从下一个蜘蛛中间件开始,没有其他 process_spider_exception() 将被调用。 - 参数
response (Response object) -- 引发异常时正在处理的响应 exception (Exception object) -- 引发的异常 spider (Spider object) -- 引发异常的蜘蛛
- process_start_requests(start_requests, spider)¶
这个方法是用spider的start请求调用的,其工作原理与 process_spider_output() 方法,但它没有关联的响应,必须只返回请求(而不是项)。 它接收一个可迭代的(在 start_requests 参数),并且必须返回另一个可迭代的 Request 对象。 注解 在您的蜘蛛中间件中实现此方法时,您应该始终返回一个ITerable(跟随输入的ITerable),而不是全部消费。 start_requests 迭代器,因为它可能非常大(甚至没有边界),并导致内存溢出。scrappy引擎设计用于在有能力处理启动请求的情况下提取它们,因此,如果存在停止spider的其他条件(如时间限制或项目/页面计数),则启动请求迭代器实际上可以是无止境的。 - 参数
- from_crawler(cls, crawler)¶
如果存在,则调用该类方法从 Crawler . 它必须返回中间件的新实例。爬虫对象提供对所有零碎核心组件(如设置和信号)的访问;它是中间件访问它们并将其功能连接到零碎的一种方式。 - 参数
crawler (Crawler object) -- 使用此中间件的爬虫程序
|