scrapy信號擴展


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM