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')