Python中SpiderMiddleware的使用方法

今天就跟大家聊聊有關(guān)Python中Spider Middleware的使用方法,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、成都網(wǎng)站建設(shè)、蘭坪網(wǎng)絡(luò)推廣、重慶小程序開發(fā)、蘭坪網(wǎng)絡(luò)營銷、蘭坪企業(yè)策劃、蘭坪品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供蘭坪建站搭建服務(wù),24小時服務(wù)熱線:028-86922220,官方網(wǎng)址:muchs.cn

前言

大部分人的身上,有一種近乎無解的矛盾——

★  

想要養(yǎng)成早起的習(xí)慣,卻一不小心刷手機(jī)到凌晨兩點(diǎn);

看到一篇干貨文章,第一反應(yīng)是加收藏夾下次再看(收藏從未停止,學(xué)習(xí)從未開始。/ 收藏==學(xué)會);

想要瘦身塑形,卻在深夜破功:“吃飽了才有力氣減肥”;

看到一門不錯的課程,卻還是告訴自己有時間了再學(xué)......

”    

Spider Middleware的使用方法

Spider Middleware是介入到Scrapy的Spider處理機(jī)制的鉤子框架。

當(dāng)Downloader生成Response之后,Response會被發(fā)送給Spider,在發(fā)送Spider之前,Response會首先經(jīng)過Spider Middleware處理,當(dāng)Spider處理生成Item和Request之后,Item和Request還會經(jīng)過Spider Middleware的處理。

Spider Middleware有如下三個作用:

  • 我們可以在Downloader生成Response發(fā)送給Spider之前,也就是Response發(fā)送給Spider之前對Response進(jìn)行處理。
  • 我們可以Spider生成Request發(fā)送給Scheduler之前,也就是Request發(fā)送給Scheduler之前對Request進(jìn)行處理。
  • 我們可以在Spider生成Item發(fā)送給Item Pipeline之前,也就是Item發(fā)送給Item Pipeline之前對Item進(jìn)行處理。
 

使用說明

需要說明的是Scrapy其實(shí)已經(jīng)提供了許多Spider Middleware,它們被SPIDER_MIDDLEWARES_BASE這個變量所定義。

SPIDER_MIDDLEWARE_BASE變量內(nèi)容如下:

{
    'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware': 50,
    'scrapy.spidermiddlewares.offsite.OffsiteMiddleware': 500,
    'scrapy.spidermiddlewares.referer.RefererMiddleware': 700,
    'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware': 800,
    'scrapy.spidermiddlewares.depth.DepthMiddleware': 900,
}
 

和Downloader Middleware一樣,Spider Middleware首先加入到SPIDER_MIDDLEWARES設(shè)置當(dāng)中,該設(shè)置會和Scrapy中SPIDER_MIDDLEWARES_BASE定義的Spider Middleware合并。然后根據(jù)鍵值的數(shù)字優(yōu)先級排序,得到一個有序列表。第一個Middleware是最靠近引擎的,最后一個MIddleware是最靠近Spider的。

 

核心方法

Scrapy內(nèi)置的Spider Middleware為Spider提供了基礎(chǔ)功能。如果我們想要拓展其功能,只需要實(shí)現(xiàn)某個方法即可。

每個Spider Middleware都定義了以下一個或多個方法的類,核心方法有如下4個:

  • process_spider_input(response, spider)
  • process_spider_output(response, result, spider)
  • process_spider_exception(response, exception, spider)
  • process_start_requests(start_requests, spider)
 

process_spider_input(response, spider)

當(dāng)Response通過Spider Middleware時,該方法被調(diào)用,處理該Response。

方法的參數(shù)有兩個:

  • response:即Response對象,即被處理的Response
  • Spider:即Spider對象,即該Response對應(yīng)的Spider

process_spider_input()應(yīng)該返回None或拋出異常。

  • 如果返回None,Scrapy將繼續(xù)處理該Response,調(diào)用其他的Spider Middleware直到Spider處理該Response。
  • 如果拋出一個異常,Scrapy將不會調(diào)用任何其他Spider Middleware的process_spider_input()的方法,并調(diào)用Request的errback()方法。errback()的輸出將會以另一個方向被重新輸入到中間件中,使用process_spider-output()方法來處理,當(dāng)其拋出異常時,則調(diào)用process_spider_exception()來處理。
 

process_spider_output(response, result, spider)

當(dāng)Spider處理Response返回結(jié)果時,該方法被調(diào)用。

方法的參數(shù)有三個:

  • response,即Response對象,即生成該輸出的Response;
  • result,包含Request或Item對象的可迭代對象,即Spider返回的結(jié)果;
  • spider,即Spider對象,即其結(jié)果對應(yīng)的Spider。

process_spider_output()必須返回包含Request或Item對象的可迭代對象。

 

process_spider_exception(response, exception, spider)

當(dāng)Spider或Spider Middleware的process_spider_input()方法拋出異常時,該方法被調(diào)用。

方法的參數(shù)有三個:

  • response,即Response對象,即異常被拋出時被處理的Response。
  • exception,即Exception對象,被拋出的異常。
  • spider,即Spider對象,即拋出異常的Spider

process_spider_exception()要么返回None,要么返回一個包含Response或Item對象的可迭代對象。

  • 如果其返回None,Scrapy將繼續(xù)處理該異常,調(diào)用其他Spider Middleware中的process_spider_exception()方法,直到所有的Spider Middleware被調(diào)用。
  • 如果返回一個可迭代對象,則其他的Spider Middleware的process_spider_output()方法被調(diào)用,其他的process_spider_exception()將不會被調(diào)用。
 

process_start_requests(start_requests, spider)

該方法以Spider啟動的Request為參數(shù)被調(diào)用,執(zhí)行的過程類似于process_spider_output(),只不過其他沒有相關(guān)聯(lián)的Response并且必須返回Request。

方法的參數(shù)有兩個:

  • start_requests,即包含Request的可迭代對象,即Start Requests
  • spider,即Spider對象,即Start Requests所屬的Spider

其必須返回一個包含Request對象的可迭代對象。

 

開啟Spider Middleware

每當(dāng)我們創(chuàng)建一個新的項目的時候,就會生成一個middlewares.py的文件,在這個文件中有一個類:MiddletestSpiderMiddleware,這個類與我們創(chuàng)建的項目名相關(guān),我創(chuàng)建的項目名為``Middletest`。因此,當(dāng)我們修改這個項目名的時候,這個類名也要跟著修改。

在這個類中,里面就有我們上面所描述的四個核心方法。

我們要開啟這個Spider Middleware,可以到settings.py里面去開啟:

# Enable or disable spider middlewares
# See https://docs.scrapy.org/en/latest/topics/spider-middleware.html
SPIDER_MIDDLEWARES = {
    'middletest.middlewares.MiddletestSpiderMiddleware': 543,
}

只需要取消注釋即可。

看完上述內(nèi)容,你們對Python中Spider Middleware的使用方法有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

網(wǎng)頁名稱:Python中SpiderMiddleware的使用方法
鏈接地址:http://muchs.cn/article10/jchdgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google營銷型網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、App開發(fā)、ChatGPT、品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)