成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

scrapy之DOWNLOADER MIDDLEWARES

wangym / 2959人閱讀

摘要:已安裝的中間件的方法則會(huì)在每個(gè)返回時(shí)被調(diào)用。當(dāng)新返回的被執(zhí)行后,相應(yīng)地中間件鏈將會(huì)根據(jù)下載的被調(diào)用。參數(shù)對(duì)象處理的對(duì)象該對(duì)應(yīng)的必須返回以下之一對(duì)象對(duì)象或。果其拋出一個(gè)異常,則調(diào)用的。

0.前言

第一次寫博客,想想都還有點(diǎn)小激動(dòng),其實(shí)早就想寫寫這段時(shí)間的學(xué)習(xí)歷程了,奈何文字功底不強(qiáng),總是剛提筆就放下了。覺(jué)得以后還是要堅(jiān)持下去~~
這篇文章主要講了在scrapy中的DOWNLOADER MIDDLEWARES

1.scrapy中的DOWNLOADER_MIDDLEWARES

下載器中間件事Scrapy在處理請(qǐng)求/響應(yīng)時(shí)的鉤子,是用來(lái)全局改變Scrapy的請(qǐng)求和響應(yīng)的一個(gè)輕量,底層的系統(tǒng)

1.1激活下載器中間件

要激活下載器中間件組件,將其加入到DOWNLOADER_MIDDLEWARES設(shè)置中。該設(shè)置是一個(gè)字典,鍵為中間件的類的路徑,值為其中間件的順序,如:

DOWNLOADER_MIDDLEWARES = {
"myproject.middlewares.CustomDownloaderMiddleware": 543,
}

DOWNLOADER_MIDDLEWARES設(shè)置會(huì)與 Scrapy 定義的DOWNLOADER_MIDDLEWARES_BASE 設(shè)置合并(但不是覆蓋),而后根據(jù)順序(order)進(jìn)行排序,最后得到啟用中間件的有序列表: 第一個(gè)中間件是最靠近引擎的,最后一個(gè)中間件是最靠近下載器的。
關(guān)于如何分配中間件的順序請(qǐng)查看DOWNLOADER_MIDDLEWARES_BASE 設(shè)置,而后根據(jù)您想要放置中間件的位置選擇一個(gè)值。由于每個(gè)中間件執(zhí)行不同的動(dòng)作,您的中間件可能會(huì)依賴于之前(或者之后)執(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編寫自己的中間件下載組件

每個(gè)中間件組成部分都是一個(gè)Python類,這個(gè)類定義了以下方法中的一個(gè)或多個(gè):

class scrapy.downloadermiddlewares.DownloaderMiddleware
    process_request(request,spider)
    process_response(request, response, spider)
    process_exception(request, exception, spider)

詳細(xì)介紹:

proces_request(request,spider):

每個(gè)request通過(guò)下載中間件時(shí),該方法被調(diào)用

必須返回其中之一:None,Response對(duì)象,Request對(duì)象或者raise IgnoreRequest。

如果返回None,Scrapy將繼續(xù)處理該Request,執(zhí)行其他的中間件的相應(yīng)方法,直到合適的下載處理函數(shù)被調(diào)用,請(qǐng)求被執(zhí)行,響應(yīng)被下載

如果返回 Response對(duì)象,Scrapy將不會(huì)調(diào)用其他任proces_request()或者process_exception()方法,或者相應(yīng)的下載函數(shù);它將返回這個(gè)響應(yīng)。已安裝的中間件的 process_response()方法則會(huì)在每個(gè)response返回時(shí)被調(diào)用。

如果其返回 Request 對(duì)象,Scrapy 則停止調(diào)用 process_request 方法并重新調(diào)度返回的request。當(dāng)新返回的request被執(zhí)行后,相應(yīng)地中間件鏈將會(huì)根據(jù)下載的response被調(diào)用。

如果其raise一個(gè)IgnoreRequest 異常,則安裝的下載中間件的 process_exception() 方法會(huì)被調(diào)用。如果沒(méi)有任何一個(gè)方法處理該異常, 則 request 的 errback( Request.errback )方法會(huì)被調(diào)用。如果沒(méi)有代碼處理拋出的異常, 則該異常被忽略且不記錄(不同于其他異常那樣)。

參數(shù):

 1.request ( Request 對(duì)象) – 處理的 request
 2.spider ( Spider 對(duì)象) – 該 request 對(duì)應(yīng)的 spider

process_response(request, response, spider):

必須返回以下之一:Response 對(duì)象、Request 對(duì)象或raise IgnoreRequest。

如果其返回一個(gè)Response(可以與傳入的 response 相同,也可以是全新的對(duì)象) 該 response 會(huì)被在鏈中的其他中間件的process_response()方法處理。

如果其返回一個(gè) Request 對(duì)象,則中間件鏈停止,返回的 request 會(huì)被重新調(diào)度下載。處理類似于 process_request()返回 request 所做的那樣。

果其拋出一個(gè) IgnoreRequest 異常,則調(diào)用 request 的 errback(Request.errback)。如果沒(méi)有代碼處理拋出的異常,則該異常被忽略且不記錄(不同于其他異常那樣)。

參數(shù)

  1.request (Request對(duì)象) – response 所對(duì)應(yīng)的 request
  2.response (Response對(duì)象) – 被處理的 response
  3.spider (Spider對(duì)象) – response 所對(duì)應(yīng)的 spider

process_exception(request, exception, spider):

返回以下之一: 返回None 、一個(gè) Response 對(duì)象、或者一個(gè) Request 對(duì)象。

如果其返回None,Scrapy 將會(huì)繼續(xù)處理該異常,接著調(diào)用已安裝的其他中間件的 process_exception()方法,直到所有中間件都被調(diào)用完畢,則調(diào)用默認(rèn)的異常處理。

如果其返回一個(gè) Response 對(duì)象,則已安裝的中間件鏈的 process_response()方法被調(diào)用。Scrapy 將不會(huì)調(diào)用任何其他中間件的 process_exception() 方法。

如果其返回一個(gè)Request對(duì)象,則返回的request將會(huì)被重新調(diào)用下載。這將停止中間件的 process_exception()方法執(zhí)行,就如返回一個(gè) response 的那樣。

參數(shù)

     1.request(Request 對(duì)象) – 產(chǎn)生異常的 request
     2.exception(Exception 對(duì)象) – 拋出的異常
     3.spider(Spider 對(duì)象) – request 對(duì)應(yīng)的 spider

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/37882.html

相關(guān)文章

  • Python網(wǎng)頁(yè)信息采集:使用PhantomJS采集淘寶天貓商品內(nèi)容

    摘要:,引言最近一直在看爬蟲框架,并嘗試使用框架寫一個(gè)可以實(shí)現(xiàn)網(wǎng)頁(yè)信息采集的簡(jiǎn)單的小程序。本文主要介紹如何使用結(jié)合采集天貓商品內(nèi)容,文中自定義了一個(gè),用來(lái)采集需要加載的動(dòng)態(tài)網(wǎng)頁(yè)內(nèi)容。 showImg(https://segmentfault.com/img/bVyMnP); 1,引言 最近一直在看Scrapy 爬蟲框架,并嘗試使用Scrapy框架寫一個(gè)可以實(shí)現(xiàn)網(wǎng)頁(yè)信息采集的簡(jiǎn)單的小程序。嘗試...

    z2xy 評(píng)論0 收藏0
  • Python爬蟲Scrapy學(xué)習(xí)(基礎(chǔ)篇)

    摘要:下載器下載器負(fù)責(zé)獲取頁(yè)面數(shù)據(jù)并提供給引擎,而后提供給。下載器中間件下載器中間件是在引擎及下載器之間的特定鉤子,處理傳遞給引擎的。一旦頁(yè)面下載完畢,下載器生成一個(gè)該頁(yè)面的,并將其通過(guò)下載中間件返回方向發(fā)送給引擎。 作者:xiaoyu微信公眾號(hào):Python數(shù)據(jù)科學(xué)知乎:Python數(shù)據(jù)分析師 在爬蟲的路上,學(xué)習(xí)scrapy是一個(gè)必不可少的環(huán)節(jié)。也許有好多朋友此時(shí)此刻也正在接觸并學(xué)習(xí)sc...

    pkhope 評(píng)論0 收藏0
  • scrapy學(xué)習(xí)路5(selenium集成到scrapy下(crawspider未測(cè)試))

    摘要:基本優(yōu)化為了不讓每次啟動(dòng)添加它到定義類的初始方法中啟動(dòng)優(yōu)化瀏覽器的自動(dòng)開(kāi)啟與關(guān)閉在中加入信號(hào)鏈爬蟲結(jié)束會(huì)輸出 1:基本 Middlewares.py(downloader)showImg(https://segmentfault.com/img/bV182i?w=893&h=311); spider/xxx.pyshowImg(https://segmentfault.com/img/...

    adie 評(píng)論0 收藏0
  • Scrapy 爬取七麥 app數(shù)據(jù)排行榜

    摘要:目錄前言創(chuàng)建項(xiàng)目創(chuàng)建創(chuàng)建解析付費(fèi)榜運(yùn)行爬取初始列表調(diào)用腳本獲取詳情前言熟悉之后,本篇文章帶大家爬取七麥數(shù)據(jù)的付費(fèi)應(yīng)用排行榜前名應(yīng)用。根據(jù)傳入的正則表達(dá)式對(duì)數(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...

    kk_miles 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<