您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關Python中Spider Middleware的使用方法,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
大部分人的身上,有一種近乎無解的矛盾——
★想要養成早起的習慣,卻一不小心刷手機到凌晨兩點;
看到一篇干貨文章,第一反應是加收藏夾下次再看(收藏從未停止,學習從未開始。/ 收藏==學會);
想要瘦身塑形,卻在深夜破功:“吃飽了才有力氣減肥”;
看到一門不錯的課程,卻還是告訴自己有時間了再學......
”
Spider Middleware是介入到Scrapy的Spider處理機制的鉤子框架。
當Downloader生成Response之后,Response會被發送給Spider,在發送Spider之前,Response會首先經過Spider Middleware處理,當Spider處理生成Item和Request之后,Item和Request還會經過Spider Middleware的處理。
Spider Middleware有如下三個作用:
需要說明的是Scrapy其實已經提供了許多Spider Middleware,它們被SPIDER_MIDDLEWARES_BASE這個變量所定義。
SPIDER_MIDDLEWARE_BASE變量內容如下:
{
'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設置當中,該設置會和Scrapy中SPIDER_MIDDLEWARES_BASE定義的Spider Middleware合并。然后根據鍵值的數字優先級排序,得到一個有序列表。第一個Middleware是最靠近引擎的,最后一個MIddleware是最靠近Spider的。
Scrapy內置的Spider Middleware為Spider提供了基礎功能。如果我們想要拓展其功能,只需要實現某個方法即可。
每個Spider Middleware都定義了以下一個或多個方法的類,核心方法有如下4個:
當Response通過Spider Middleware時,該方法被調用,處理該Response。
方法的參數有兩個:
process_spider_input()應該返回None或拋出異常。
當Spider處理Response返回結果時,該方法被調用。
方法的參數有三個:
process_spider_output()必須返回包含Request或Item對象的可迭代對象。
當Spider或Spider Middleware的process_spider_input()方法拋出異常時,該方法被調用。
方法的參數有三個:
process_spider_exception()要么返回None,要么返回一個包含Response或Item對象的可迭代對象。
該方法以Spider啟動的Request為參數被調用,執行的過程類似于process_spider_output(),只不過其他沒有相關聯的Response并且必須返回Request。
方法的參數有兩個:
其必須返回一個包含Request對象的可迭代對象。
每當我們創建一個新的項目的時候,就會生成一個middlewares.py
的文件,在這個文件中有一個類:MiddletestSpiderMiddleware
,這個類與我們創建的項目名相關,我創建的項目名為``Middletest`。因此,當我們修改這個項目名的時候,這個類名也要跟著修改。
在這個類中,里面就有我們上面所描述的四個核心方法。
我們要開啟這個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,
}
只需要取消注釋即可。
看完上述內容,你們對Python中Spider Middleware的使用方法有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。