鍍金池/ 教程/ Python/ 信號(Signals)
Benchmarking
命令行工具(Command line tools)
下載器中間件(Downloader Middleware)
信號(Signals)
Telnet 終端(Telnet Console)
初窺 Scrapy
數(shù)據(jù)收集(Stats Collection)
Scrapyd
通用爬蟲(Broad Crawls)
Item Loaders
試驗(yàn)階段特性
Scrapy 入門教程
自動限速(AutoThrottle)擴(kuò)展
Settings
Scrapy 終端(Scrapy shell)
下載項(xiàng)目圖片
DjangoItem
調(diào)試(Debugging)Spiders
選擇器(Selectors)
Feed exports
Spiders Contracts
借助 Firefox 來爬取
Logging
Spiders
Ubuntu 軟件包
實(shí)踐經(jīng)驗(yàn)(Common Practices)
安裝指南
Item Exporters
擴(kuò)展(Extensions)
Items
Spider 中間件(Middleware)
異常(Exceptions)
例子
發(fā)送 email
架構(gòu)概覽
常見問題(FAQ)
Jobs:暫停,恢復(fù)爬蟲
核心 API
使用 Firebug 進(jìn)行爬取
Item Pipeline
Link Extractors
Web Service
調(diào)試內(nèi)存溢出

信號(Signals)

Scrapy 使用信號來通知事情發(fā)生。您可以在您的 Scrapy 項(xiàng)目中捕捉一些信號(使用 extension)來完成額外的工作或添加額外的功能,擴(kuò)展 Scrapy。

雖然信號提供了一些參數(shù),不過處理函數(shù)不用接收所有的參數(shù) - 信號分發(fā)機(jī)制(singal dispatching mechanism)僅僅提供處理器(handler)接受的參數(shù)。

您可以通過信號(Signals) API 來連接(或發(fā)送您自己的)信號。

延遲的信號處理器(Deferred signal handlers)

有些信號支持從處理器返回 Twisted deferreds,參考下邊的內(nèi)置信號參考手冊(Built-in signals reference)來了解哪些支持。

內(nèi)置信號參考手冊(Built-in signals reference)

以下給出 Scrapy 內(nèi)置信號的列表及其意義。

engine_started

scrapy.signals.engine_started()

當(dāng) Scrapy 引擎啟動爬取時(shí)發(fā)送該信號。

該信號支持返回 deferreds。

注解

該信號可能會在信號 spider_opened 之后被發(fā)送,取決于 spider 的啟動方式。 所以不要 依賴 該信號會比 spider-opened 更早被發(fā)送。

engine_stopped

scrapy.signals.engine_stopped()

當(dāng) Scrapy 引擎停止時(shí)發(fā)送該信號(例如,爬取結(jié)束)。

該信號支持返回 deferreds。

item_scraped

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

當(dāng) item 被爬取,并通過所有 Item Pipeline 后(沒有被丟棄(dropped),發(fā)送該信號。

該信號支持返回 deferreds。

參數(shù):

  • item (Item 對象) – 爬取到的 item
  • spider (Spider 對象) – 爬取 item 的 spider
  • response (Response 對象) – 提取 item 的 response

item_dropped

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

當(dāng) item 通過 Item Pipeline,有些 pipeline 拋出 DropItem 異常,丟棄 item 時(shí),該信號被發(fā)送。

該信號支持返回 deferreds。

參數(shù):

  • item (Item 對象) – 爬取到的 item
  • spider (Spider 對象) – 爬取 item 的 spider
  • exception (DropItem 異常) – 導(dǎo)致 item 被丟棄的異常(必須是 DropItem 的子類)

spider_closed

scrapy.signals.spider_closed(spider, reason)

當(dāng)某個(gè) spider 被關(guān)閉時(shí),該信號被發(fā)送。該信號可以用來釋放每個(gè) spider 在 spider_opened 時(shí)占用的資源。

該信號支持返回 deferreds。

參數(shù):

  • spider (Spider 對象) – 關(guān)閉的 spider
  • reason (str) – 描述 spider 被關(guān)閉的原因的字符串。如果 spider 是由于完成爬取而被關(guān)閉,則其為'finished'。否則,如果 spider 是被引擎的 close_spider 方法所關(guān)閉,則其為調(diào)用該方法時(shí)傳入的 reason 參數(shù)(默認(rèn)為'cancelled')。如果引擎被關(guān)閉(例如, 輸入 Ctrl-C),則其為'shutdown'。

spider_opened

scrapy.signals.spider_opened(spider)

當(dāng) spider 開始爬取時(shí)發(fā)送該信號。該信號一般用來分配 spider 的資源,不過其也能做任何事。

該信號支持返回 deferreds。

參數(shù):

  • spider (Spider 對象) – 開啟的 spider

spider_idle

scrapy.signals.spider_idle(spider)

當(dāng) spider 進(jìn)入空閑(idle)狀態(tài)時(shí)該信號被發(fā)送。空閑意味著:

  • requests 正在等待被下載
  • requests 被調(diào)度
  • items 正在 item pipeline 中被處理

當(dāng)該信號的所有處理器(handler)被調(diào)用后,如果 spider 仍然保持空閑狀態(tài),引擎將會關(guān)閉該 spider。當(dāng) spider 被關(guān)閉后,spider_closed 信號將被發(fā)送。

您可以,比如,在 spider_idle 處理器中調(diào)度某些請求來避免 spider 被關(guān)閉。

該信號不支持返回 deferreds。

參數(shù):

  • spider (Spider 對象) – 空閑的 spider

spider_error

scrapy.signals.spider_error(failure, response, spider)

當(dāng) spider 的回調(diào)函數(shù)產(chǎn)生錯(cuò)誤時(shí)(例如,拋出異常),該信號被發(fā)送。

參數(shù):

  • failure (Failure 對象) – 以 Twisted Failure 對象拋出的異常
  • response (Response 對象) – 當(dāng)異常被拋出時(shí)被處理的 response
  • spider (Spider 對象) – 拋出異常的 spider

request_scheduled

scrapy.signals.request_scheduled(request, spider)

當(dāng)引擎調(diào)度一個(gè) Request 對象用于下載時(shí),該信號被發(fā)送。

該信號 不支持 返回 deferreds。

參數(shù):

  • request (Request 對象) – 到達(dá)調(diào)度器的 request
  • spider (Spider 對象) – 產(chǎn)生該 request 的 spider

request_dropped

scrapy.signals.request_dropped(request, spider)

Sent 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 (Request object) – the request that reached the scheduler
  • spider (Spider object) – the spider that yielded the request

response_received

scrapy.signals.response_received(response, request, spider)

當(dāng)引擎從 downloader 獲取到一個(gè)新的 Response 時(shí)發(fā)送該信號。

該信號 不支持 返回 deferreds。

參數(shù):

  • response (Response 對象) – 接收到的 response
  • request (Request 對象) – 生成 response 的 request
  • spider (Spider 對象) – response 所對應(yīng)的 spider

response_downloaded

scrapy.signals.response_downloaded(response, request, spider)

當(dāng)一個(gè) HTTPResponse 被下載時(shí),由 downloader 發(fā)送該信號。

該信號 不支持 返回 deferreds。

參數(shù):

  • response (Response 對象) – \下載的 response
  • request (Request 對象) – 生成 response 的 request
  • spider (Spider 對象) – response 所對應(yīng)的 spider
上一篇:試驗(yàn)階段特性下一篇:Logging