Scrapy 使用信號來通知事情發(fā)生。您可以在您的 Scrapy 項(xiàng)目中捕捉一些信號(使用 extension)來完成額外的工作或添加額外的功能,擴(kuò)展 Scrapy。
雖然信號提供了一些參數(shù),不過處理函數(shù)不用接收所有的參數(shù) - 信號分發(fā)機(jī)制(singal dispatching mechanism)僅僅提供處理器(handler)接受的參數(shù)。
您可以通過信號(Signals) API 來連接(或發(fā)送您自己的)信號。
有些信號支持從處理器返回 Twisted deferreds,參考下邊的內(nèi)置信號參考手冊(Built-in signals reference)
來了解哪些支持。
以下給出 Scrapy 內(nèi)置信號的列表及其意義。
當(dāng) Scrapy 引擎啟動爬取時(shí)發(fā)送該信號。
該信號支持返回 deferreds。
注解
該信號可能會在信號
spider_opened
之后被發(fā)送,取決于 spider 的啟動方式。 所以不要 依賴 該信號會比spider-opened
更早被發(fā)送。
當(dāng) Scrapy 引擎停止時(shí)發(fā)送該信號(例如,爬取結(jié)束)。
該信號支持返回 deferreds。
當(dāng) item 被爬取,并通過所有 Item Pipeline 后(沒有被丟棄(dropped),發(fā)送該信號。
該信號支持返回 deferreds。
參數(shù):
Item
對象) – 爬取到的 itemSpider
對象) – 爬取 item 的 spiderResponse
對象) – 提取 item 的 response當(dāng) item 通過 Item Pipeline,有些 pipeline 拋出 DropItem 異常,丟棄 item 時(shí),該信號被發(fā)送。
該信號支持返回 deferreds。
參數(shù):
Item
對象) – 爬取到的 itemSpider
對象) – 爬取 item 的 spiderDropItem
異常) – 導(dǎo)致 item 被丟棄的異常(必須是 DropItem 的子類)當(dāng)某個(gè) spider 被關(guān)閉時(shí),該信號被發(fā)送。該信號可以用來釋放每個(gè) spider 在 spider_opened
時(shí)占用的資源。
該信號支持返回 deferreds。
參數(shù):
Spider
對象) – 關(guān)閉的 spider'finished'
。否則,如果 spider 是被引擎的 close_spider
方法所關(guān)閉,則其為調(diào)用該方法時(shí)傳入的 reason
參數(shù)(默認(rèn)為'cancelled'
)。如果引擎被關(guān)閉(例如, 輸入 Ctrl-C),則其為'shutdown'
。當(dāng) spider 開始爬取時(shí)發(fā)送該信號。該信號一般用來分配 spider 的資源,不過其也能做任何事。
該信號支持返回 deferreds。
參數(shù):
Spider 對象
) – 開啟的 spider當(dāng) spider 進(jìn)入空閑(idle)狀態(tài)時(shí)該信號被發(fā)送。空閑意味著:
當(dāng)該信號的所有處理器(handler)被調(diào)用后,如果 spider 仍然保持空閑狀態(tài),引擎將會關(guān)閉該 spider。當(dāng) spider 被關(guān)閉后,spider_close
d 信號將被發(fā)送。
您可以,比如,在 spider_idle
處理器中調(diào)度某些請求來避免 spider 被關(guān)閉。
該信號不支持返回 deferreds。
參數(shù):
Spider
對象) – 空閑的 spider當(dāng) spider 的回調(diào)函數(shù)產(chǎn)生錯(cuò)誤時(shí)(例如,拋出異常),該信號被發(fā)送。
參數(shù):
Response 對象
) – 當(dāng)異常被拋出時(shí)被處理的 responseSpider 對象
) – 拋出異常的 spider當(dāng)引擎調(diào)度一個(gè) Request 對象用于下載時(shí),該信號被發(fā)送。
該信號 不支持 返回 deferreds。
參數(shù):
Request
對象) – 到達(dá)調(diào)度器的 requestSpider
對象) – 產(chǎn)生該 request 的 spiderSent when a Request
, scheduled by the engine to be downloaded later, is rejected by the scheduler.
The signal does not support returning deferreds from their handlers.
參數(shù):
Request
object) – the request that reached the schedulerSpider
object) – the spider that yielded the request當(dāng)引擎從 downloader 獲取到一個(gè)新的 Response 時(shí)發(fā)送該信號。
該信號 不支持 返回 deferreds。
參數(shù):
Response
對象) – 接收到的 responseRequest
對象) – 生成 response 的 requestSpider 對象
) – response 所對應(yīng)的 spider當(dāng)一個(gè) HTTPResponse 被下載時(shí),由 downloader 發(fā)送該信號。
該信號 不支持 返回 deferreds。
參數(shù):
Response
對象) – \下載的 responseRequest
對象) – 生成 response 的 requestSpider 對象
) – response 所對應(yīng)的 spider