信号

当某些事件发生时,Scrapy会广泛使用信号通知。您可以在Scrapy项目中捕获一些信号(例如使用扩展名)来执行其他任务或扩展Scrapy以添加开箱即用的功能。

即使信号提供了几个参数,捕获它们的处理程序也不需要接受所有这些参数 - 信号调度机制只会传递处理程序接受的参数。

您可以通过信号API连接信号(或发送自己的信号)。

以下是一个简单的示例,显示如何捕获信号并执行某些操作:

从刮取进口信号

从进口蜘蛛蜘蛛

DmozSpider(蜘蛛)类:

name =“dmoz”

allowed\_domains = \[“dmoz.org”\]

start\_urls = \[

    “http://www.dmoz.org/Computers/Programming/Languages/Python/Books/”

    “http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/”

\]





@classmethod

def from\_crawler(cls,crawler,\* args,\*\* kwargs):

    spider = super(DmozSpider,cls).from\_crawler(crawler,\* args,\*\* kwargs)

    crawler.signals.connect(spider.spider\_closed,signal = signals.spider\_closed)

    返回蜘蛛





def spider\_closed(self,spider):

    spider.logger.info('Spider closed:%s',spider.name)





def解析(self,response):

    通过

延迟信号处理程序

一些信号支持从他们的处理程序返回Twisted deferreds,请参阅下面的内置信号参考,以了解哪些信号。

内置信号参考

这是Scrapy内置信号及其含义的列表。

engine_started

scrapy.signals.engine_started()

当Scrapy引擎开始爬行时发送。

此信号支持从其处理程序返回延期。

注意

这个信号可能会在蜘蛛打开的信号后发射,这取决于蜘蛛的启动方式。所以不要依赖这个信号在spider_opened之前被解雇。

engine_stopped

scrapy.signals.engine_stopped()

当Scrapy引擎停止时发送(例如,当爬行过程完成时)。

此信号支持从其处理程序返回延期。

item_scraped

scrapy.signals.item_scraped(item,response,spider)

在已经通过所有项目管道阶段(不被删除)之后,已经刮除了项目时发送。

此信号支持从其处理程序返回延期。

参数:

项目(dict或Item对象) - 已删除的项目

蜘蛛(蜘蛛对象) - 蜘蛛刮的物品

响应(响应对象) - 从哪里刮取项目的响应

item_dropped

scrapy.signals.item_dropped(item,response,exception,spider)

在某些阶段引发DropItem异常时,从项目管道中删除项目后发送。

此信号支持从其处理程序返回延期。

参数:

item(dict或Item对象) - 从项目管道中删除的项目

蜘蛛(蜘蛛对象) - 蜘蛛刮的物品

response(响应对象) - 从项目删除的位置的响应

异常(DropItem异常) - 异常(它必须是一个DropItem子类),导致该项被删除

spider_closed

scrapy.signals.spider_closed(蜘蛛,原因)

在蜘蛛关闭后发送。这可以用于释放spider_opened保留的每蜘蛛资源。

此信号支持从其处理程序返回延期。

参数:

蜘蛛(Spider对象) - 已经关闭的蜘蛛

reason(str) - 一个描述蜘蛛关闭原因的字符串。如果由于蜘蛛已经完成刮除而关闭,原因是“完成”。否则,如果通过调用close_spider引擎方法手动关闭了蜘蛛,则原因是该方法的原因参数中传递的原因(默认为“取消”)。如果引擎关闭(例如,通过按Ctrl-C来停止它),原因将是“关闭”。

spider_opened

scrapy.signals.spider_opened(蜘蛛)

在蜘蛛打开爬行后发送。这通常用于保留每个蜘蛛资源,但可以用于在打开蜘蛛时需要执行的任何任务。

此信号支持从其处理程序返回延期。

参数:spider(Spider object) - 已打开的蜘蛛

spider_idle

scrapy.signals.spider_idle(蜘蛛)

蜘蛛已经空闲时发出,这意味着蜘蛛没有进一步的:

等待下载的请求

预定请求

正在项目管道中处理的项目

如果该信号的所有处理程序完成后空闲状态仍然存在,则引擎开始关闭蜘蛛。蜘蛛关闭完成后,发送蜘蛛闭塞信号。

例如,您可以在spider_idle处理程序中安排一些请求,以防止蜘蛛关闭。

此信号不支持从其处理程序返回延期。

参数:spider(Spider对象) - 已经空闲的蜘蛛

spider_error

scrapy.signals.spider_error(失败,回应,蜘蛛)

当蜘蛛回调产生错误(即引发异常)时发送。

此信号不支持从其处理程序返回延期。

参数:

failure(Failure对象) - 作为Twisted Failure对象引发的异常

response(响应对象) - 异常引发时正在处理的响应

蜘蛛(Spider对象) - 引起异常的蜘蛛

request_scheduled

scrapy.signals.request_scheduled(请求,蜘蛛)

发送时发动机安排一个请求,稍后下载。

该信号不支持从其处理程序返回延期。

参数:

request(Request对象) - 到达调度程序的请求

蜘蛛(Spider对象) - 产生请求的蜘蛛

request_dropped

scrapy.signals.request_dropped(请求,蜘蛛)

发送时,由发动机安排的请求稍后下载,被调度程序拒绝。

该信号不支持从其处理程序返回延期。

参数:

request(Request对象) - 到达调度程序的请求

蜘蛛(Spider对象) - 产生请求的蜘蛛

response_received

scrapy.signals.response_received(响应,请求,蜘蛛)

当引擎从下载程序接收到新的响应时发送。

此信号不支持从其处理程序返回延期。

参数:

响应(响应对象) - 收到的响应

request(Request对象) - 生成响应的请求

蜘蛛(Spider对象) - 反应意图的蜘蛛

response_downloaded

scrapy.signals.response_downloaded(响应,请求,蜘蛛)

下载HTTPResponse后下载器发送。

此信号不支持从其处理程序返回延期。

参数:

响应(Response对象) - 响应下载

request(Request对象) - 生成响应的请求

蜘蛛(Spider对象) - 反应意图的蜘蛛

results matching ""

    No results matching ""