摘要:已安裝的中間件的方法則會在每個返回時被調用。當新返回的被執行后,相應地中間件鏈將會根據下載的被調用。參數對象處理的對象該對應的必須返回以下之一對象對象或。果其拋出一個異常,則調用的。
0.前言
第一次寫博客,想想都還有點小激動,其實早就想寫寫這段時間的學習歷程了,奈何文字功底不強,總是剛提筆就放下了。覺得以后還是要堅持下去~~
這篇文章主要講了在scrapy中的DOWNLOADER MIDDLEWARES
下載器中間件事Scrapy在處理請求/響應時的鉤子,是用來全局改變Scrapy的請求和響應的一個輕量,底層的系統
1.1激活下載器中間件要激活下載器中間件組件,將其加入到DOWNLOADER_MIDDLEWARES設置中。該設置是一個字典,鍵為中間件的類的路徑,值為其中間件的順序,如:
DOWNLOADER_MIDDLEWARES = { "myproject.middlewares.CustomDownloaderMiddleware": 543, }
DOWNLOADER_MIDDLEWARES設置會與 Scrapy 定義的DOWNLOADER_MIDDLEWARES_BASE 設置合并(但不是覆蓋),而后根據順序(order)進行排序,最后得到啟用中間件的有序列表: 第一個中間件是最靠近引擎的,最后一個中間件是最靠近下載器的。
關于如何分配中間件的順序請查看DOWNLOADER_MIDDLEWARES_BASE 設置,而后根據您想要放置中間件的位置選擇一個值。由于每個中間件執行不同的動作,您的中間件可能會依賴于之前(或者之后)執行的中間件,因此順序是很重要的。
如果您想禁止內置的(在DOWNLOADER_MIDDLEWARES_BASE 中設置并默認啟用的)中間件,您必須在項目的 DOWNLOADER_MIDDLEWARES 設置中定義該中間件,并將其值賦為None。例如,如果您想要關閉user-agent 中間件:
DOWNLOADER_MIDDLEWARES = { "myproject.middlewares.CustomDownloaderMiddleware": 543, "scrapy.downloadermiddlewares.useragent.UserAgentMiddleware": None, }1.2編寫自己的中間件下載組件
每個中間件組成部分都是一個Python類,這個類定義了以下方法中的一個或多個:
class scrapy.downloadermiddlewares.DownloaderMiddleware process_request(request,spider) process_response(request, response, spider) process_exception(request, exception, spider)
詳細介紹:
proces_request(request,spider):
每個request通過下載中間件時,該方法被調用
必須返回其中之一:None,Response對象,Request對象或者raise IgnoreRequest。
如果返回None,Scrapy將繼續處理該Request,執行其他的中間件的相應方法,直到合適的下載處理函數被調用,請求被執行,響應被下載
如果返回 Response對象,Scrapy將不會調用其他任proces_request()或者process_exception()方法,或者相應的下載函數;它將返回這個響應。已安裝的中間件的 process_response()方法則會在每個response返回時被調用。
如果其返回 Request 對象,Scrapy 則停止調用 process_request 方法并重新調度返回的request。當新返回的request被執行后,相應地中間件鏈將會根據下載的response被調用。
如果其raise一個IgnoreRequest 異常,則安裝的下載中間件的 process_exception() 方法會被調用。如果沒有任何一個方法處理該異常, 則 request 的 errback( Request.errback )方法會被調用。如果沒有代碼處理拋出的異常, 則該異常被忽略且不記錄(不同于其他異常那樣)。
參數:
1.request ( Request 對象) – 處理的 request 2.spider ( Spider 對象) – 該 request 對應的 spider
process_response(request, response, spider):
必須返回以下之一:Response 對象、Request 對象或raise IgnoreRequest。
如果其返回一個Response(可以與傳入的 response 相同,也可以是全新的對象) 該 response 會被在鏈中的其他中間件的process_response()方法處理。
如果其返回一個 Request 對象,則中間件鏈停止,返回的 request 會被重新調度下載。處理類似于 process_request()返回 request 所做的那樣。
果其拋出一個 IgnoreRequest 異常,則調用 request 的 errback(Request.errback)。如果沒有代碼處理拋出的異常,則該異常被忽略且不記錄(不同于其他異常那樣)。
參數
1.request (Request對象) – response 所對應的 request 2.response (Response對象) – 被處理的 response 3.spider (Spider對象) – response 所對應的 spider
process_exception(request, exception, spider):
返回以下之一: 返回None 、一個 Response 對象、或者一個 Request 對象。
如果其返回None,Scrapy 將會繼續處理該異常,接著調用已安裝的其他中間件的 process_exception()方法,直到所有中間件都被調用完畢,則調用默認的異常處理。
如果其返回一個 Response 對象,則已安裝的中間件鏈的 process_response()方法被調用。Scrapy 將不會調用任何其他中間件的 process_exception() 方法。
如果其返回一個Request對象,則返回的request將會被重新調用下載。這將停止中間件的 process_exception()方法執行,就如返回一個 response 的那樣。
參數
1.request(Request 對象) – 產生異常的 request 2.exception(Exception 對象) – 拋出的異常 3.spider(Spider 對象) – request 對應的 spider
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/37882.html
摘要:,引言最近一直在看爬蟲框架,并嘗試使用框架寫一個可以實現網頁信息采集的簡單的小程序。本文主要介紹如何使用結合采集天貓商品內容,文中自定義了一個,用來采集需要加載的動態網頁內容。 showImg(https://segmentfault.com/img/bVyMnP); 1,引言 最近一直在看Scrapy 爬蟲框架,并嘗試使用Scrapy框架寫一個可以實現網頁信息采集的簡單的小程序。嘗試...
摘要:下載器下載器負責獲取頁面數據并提供給引擎,而后提供給。下載器中間件下載器中間件是在引擎及下載器之間的特定鉤子,處理傳遞給引擎的。一旦頁面下載完畢,下載器生成一個該頁面的,并將其通過下載中間件返回方向發送給引擎。 作者:xiaoyu微信公眾號:Python數據科學知乎:Python數據分析師 在爬蟲的路上,學習scrapy是一個必不可少的環節。也許有好多朋友此時此刻也正在接觸并學習sc...
摘要:基本優化為了不讓每次啟動添加它到定義類的初始方法中啟動優化瀏覽器的自動開啟與關閉在中加入信號鏈爬蟲結束會輸出 1:基本 Middlewares.py(downloader)showImg(https://segmentfault.com/img/bV182i?w=893&h=311); spider/xxx.pyshowImg(https://segmentfault.com/img/...
摘要:目錄前言創建項目創建創建解析付費榜運行爬取初始列表調用腳本獲取詳情前言熟悉之后,本篇文章帶大家爬取七麥數據的付費應用排行榜前名應用。根據傳入的正則表達式對數據進行提取,返回字符串列表。 目錄 前言 創建項目 創建Item 創建Spider 解析付費榜 運行爬取初始app列表 Selenium調用JS腳本 獲取app詳情 前言 熟悉Scrapy之后,本篇文章帶大家爬取七麥數據(h...
閱讀 2351·2021-11-24 11:16
閱讀 2038·2021-09-30 09:47
閱讀 2006·2021-09-10 10:51
閱讀 1323·2019-08-30 14:08
閱讀 3141·2019-08-30 13:47
閱讀 1529·2019-08-30 13:02
閱讀 3233·2019-08-29 12:29
閱讀 3199·2019-08-26 17:05