engine_startedapp
scrapy.signals.engine_started()scrapy
當scrapy引擎啓動爬取時發送該信號ide
該信號支持返回deferreds函數
當信號可能會在信號spider_opened以後被髮送,取決於spider的啓動方式spa
engine_stoppedcode
scrapy.signals.engine_stopped()對象
當scrapy引擎中止時發送該信號例如爬取結束blog
該信號支持返回deferredsip
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')