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