engine_started
scrapy.signals.engine_started()
当scrapy引擎启动爬取时发送该信号
该信号支持返回deferreds
当信号可能会在信号spider_opened之后被发送,取决于spider的启动方式
engine_stopped
scrapy.signals.engine_stopped()
当scrapy引擎停止时发送该信号例如爬取结束
该信号支持返回deferreds
item_scraped
scrapy.signals.item_scrapped(item,response,spider)
当item被爬取,并通过Item Pipeline后没有被dropped时发送,该信号支持返回deferreds
参数:爬取到的item对象
爬取item的spider对象
提取item的response对象
item_dropped
scrapy.signals.item_dropped(item,exception,spider)
当item通过Item Pipeline,有些pipeline抛出DropItem异常,丢弃item时发送,该信号支持返回deferreds
参数:Item Pipeline丢弃的item
爬取item的spider对象
导致item被丢弃的异常,必须是DropItem的子类
spider_closed
scrapy.signals.spider_closed(spider,reason)
当某个spider被关闭时发送,该信号可以用来释放每个spider在spider_opened后占用的资源
该信号支持返回deferreds
参数:被关闭的spider对象
描述spider被关闭的原因的字符串。如果spider是由于完成爬取而被关闭,则其为‘finished'。如果spider是被引擎的close_spider方法所关闭,则其为调用该方法时的reason参数(默认为'cancelled')。如果引擎被关闭比如输入Ctrl + C ,则为'shutdown'
spider_opened
scrapy.signals.spider_opened(spider)
当spider开始爬取时发送该信号。该信号支持返回deferreds
参数:开启的spider对象
spider_idle
scrapy.signals.spider_idle(spider)
当spider进入空闲状态时发送该信号。
空闲意味着:requests正在等待被下载
requests被调度
items正在item pipeline中处理
当该信号的所有处理器handler被调用后,如果spider仍然保持空闲状态,引擎将会关闭该spider。当spider被关闭后,spider_closed信号将被发送
可以在spider_idle处理器中调度某些请求来避免spider被关闭。该信号不支持返回deferreds
参数:空闲的spider对象
spider_error
scrapy.signals.spider_error(failure,response,spider)
当spider的回调函数产生错误时发送该信号
参数:以Twisted Failure对象抛出的异常
当异常被抛出时被处理的response对象
抛出异常的spider对象
request_scheduled
scrapy.signals.request_scheduled(request,spider)
当引擎调度一个request对象用于下载时,该信号被发送,该信号不支持返回deferreds
参数:到达调度器的request对象
产生该request的spider对象
response_received
scrapy.signals.response_received(response,request,spider)
当引擎从downloader获取一个新的response时发送该信号,该信号不支持返回deferreds
参数:接受的response对象
生成response的request对象
response对应的spider对象
response_downloaded
scrapy.siganls.response_downloaded(response,request,spider)
当一个HttpResponse被下载时,由downloader发送该信号,该信号不支持返回deferreds
参数:下载的response对象
生成response的request对象
response对应的spider对象
from scrapy import signals class Myextensions(object): def __init__(self): pass @classmethod def from_crawler(cls,crawler): obj=cls() crawler.signals.connect(obj.xiaobai,signal=signals.spider_opened) crawler.signals.connect(obj.baixiao,signal=signals.spider_closed) return obj def xiaobai(self,spider): print('opened') def baixiao(selfs,spider): print('closed')