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對象的可疊代對象