Scrapy學習-21-信號量

scrapy信號量
定義
  Scrapy使用信號來通知事情發生。您能夠在您的Scrapy項目中捕捉一些信號(使用 extension)來完成額外的工做或添加額外的功能,擴展Scrapy。
  雖然信號提供了一些參數,不過處理函數不用接收全部的參數 - 信號分發機制(singal dispatching mechanism)僅僅提供處理器(handler)接受的參數。
  您能夠經過 信號(Signals) API 來鏈接(或發送您本身的)信號
 
可用信號
engine_started 當Scrapy引擎啓動爬取時發送該信號 engine_stopped 當Scrapy引擎中止時發送該信號(例如,爬取結束) item_scraped 當item被爬取,並經過全部 Item Pipeline 後(沒有被丟棄(dropped),發送該信號 item_dropped 當item經過 Item Pipeline ,有些pipeline拋出 DropItem 異常,丟棄item時,該信號被髮送 spider_closed 當某個spider被關閉時,該信號被髮送。該信號能夠用來釋放每一個spider在 spider_opened 時佔用的資源 spider_opened 當spider開始爬取時發送該信號。該信號通常用來分配spider的資源,不過其也能作任何事 spider_idle 當spider進入空閒(idle)狀態時該信號被髮送 spider_error 當spider的回調函數產生錯誤時(例如,拋出異常),該信號被髮送 request_scheduled 當引擎調度一個 Request 對象用於下載時,該信號被髮送 request_dropped 當一個請求,由引擎安排在稍後被下載時,被調度程序拒絕 response_received 當引擎從downloader獲取到一個新的 Response 時發送該信號 response_downloaded 當一個 HTTPResponse 被下載時,由downloader發送該信號

 

信號量使用
import scrapy from scrapy.xlib.pydispatch import dispatcher from scrapy import signals class JobboleSpider(scrapy.Spider): name = "jobbole" allowed_domains = ["blog.jobbole.com"] start_urls = ['http://blog.jobbole.com/all-posts/'] handle_httpstatus_list = [404] def __init__(self, **kwargs): self.fail_urls = [] dispatcher.connect(self.handle_spider_closed, signals.spider_closed) def handle_spider_closed(self, spider, reason): self.crawler.stats.set_value("failed_urls", ",".join(self.fail_urls)) def parse(self, response): if response.status == 404: self.fail_urls.append(response.url) self.crawler.stats.inc_value("failed_url")
相關文章
相關標籤/搜索