天天看點

scrapy中間件

scrapy中間件分下載下傳器中間件和爬蟲中間件

下載下傳器中間件(downloader middlewares):主要處理request請求發出去和response響應傳回的一些回調。

方法:

  process_request(self,request,spider):

    當request請求經過下載下傳器中間件的時候調用

    傳回為None:繼續請求

    傳回為Request對象,把request對象交給排程器,進行後續請求

    傳回為Response對象,不再請求,response交給引擎然後給爬蟲

  這個方法可以給request請求增加代理ip,cookie,user-agent,還可以內建selenium,傳回HtmlResponse(url,body=,request=,encoding=)

  process_response(self,request,response,spider):

    下載下傳器完成http請求,傳回responser給引擎時調用

    傳回為Request對象,交給排程器繼續請求

    傳回為Response對象,交給下一個process_response處理

  這個方法,可以進行cookie池的維護,或者對response進行MD5加密,進行資料的去重

  process_exception(request,exception,spider):

    當下載下傳處理區或者process_request抛出異常時,scrapy架構調用process_exception處理,但是不處理process_response抛出的異常,此異常調用requst的errback(Request.errback)處理

    傳回為None,調用其他process_exception方法繼續處理,直到所有中間件調用完畢,調用預設的異常處理

    傳回為Response對象,異常糾正,交給下一個process_response處理

    傳回為Request對象,交給排程器繼續請求

爬蟲中間件(spider middlewares):處了解析資料(item)的相關邏輯修正,比如資料不完整添加預設、增加其他額外資訊。(處理輸入response和輸出item或request)

  方法:

  process_spider_input(self,response,spider):

    response通過中間件,該方法調用

    傳回None,交給下一個process_spider_input處理

  process_spider_output(self,response,result,spider):

    當spider處理response傳回reult,該方法調用

    該方法必須傳回包含requset或item對象的可疊代對象iterable

  

  process_spider_exception(response,exception,spider):

    當spider或process_spider_input抛出異常時,該方法調用

    傳回為None,交給其他process_spider_exception繼續處理

    傳回一個包含responser或item對象的可疊代對象(iterable),交給其process_spider_output方法

    

   process_start_request(start_request,spider):

    spider啟動start_requests() 時調用

    接受一個可疊代對象(start_request參數)且必須傳回一個包含Request對象的可疊代對象