scrapy中間件分下載器中間件和爬蟲中間件 下載器中間件(downloader middlewares):主要處理request請求發出去和response響應返回的一些回調。 方法: process_request(self,request,spider): 返回為None:繼續請求 返回為Re ...
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對象的可迭代對象