您好,登錄后才能下訂單哦!
這篇文章主要介紹Spider Middleware是什么有什么用,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
Spider Middleware 是 Scrapy 的 Spider 處理機制的一個鉤子框架,我們可以在其中插入自定義功能,以處理發送到 Spider 進行處理的響應以及處理 Spider 生成的請求和項目。
內置爬蟲中間件
和前文介紹過的 Downloader Middleware 一樣, Scrapy 同樣為我們內置了一部分的 Spider Middleware ,這些內置的 Spider Middleware 被保存在變量 SPIDER_MIDDLEWARES_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 合并,根據數值的大小進行優先級排序,第一個 Middleware 是靠近引擎的,最后一個 Middleware 是靠近 Spider 的。
自定義爬蟲中間件
Scrapy 內置的 Spider Middleware 只提供了一些基礎的功能,我們如果需要擴展其功能,實現一個自定義的爬蟲中間件,只需要實現以下某幾個方法即可。
核心方法如下:
processspiderinput(response, spider) processspideroutput(response, result, spider) processspiderexception(response, exception, spider) processstartrequests(start_requests, spider)
只需要實現其中一個方法就可以定義一個爬蟲中間件。
processspiderinput(response, spider)
參數:
response (response 對象)–正在處理的響應
spider (spider 對象)–此響應預期用于的蜘蛛
對于通過 Spider Middleware 并進入 Spider 進行處理的每個響應,都會調用此方法。
processspiderinput() )應該返回 None 或引發異常。
如果返回 None ,則 Scrapy 將繼續處理此響應,并執行所有其他中間件,直到最終將響應交給蜘蛛進行處理。
如果引發異常, Scrapy 不會費心調用任何其他蜘蛛中間件 processspiderinput() ,并且會在存在錯誤時調用請求 errback ,否則它將啟動 processspiderexception() 鏈。 errback 的輸出在另一個方向上鏈回,以供 processspideroutput() 處理,或者如果引發異常,則鏈接到 processspiderexception() 。
processspideroutput(response, result, spider)
參數:
response ( response 對象)–從蜘蛛生成此輸出的響應
result (可迭代的 Request , dict 或 Item 對象)– spider 返回的結果
spider ( spider 對象)–正在處理其結果的蜘蛛
處理完響應后,將使用 Spider 從返回的結果中調用此方法。
processspideroutput() 必須返回 Request , dict 或 Item 對象的可迭代對象。
processspiderexception(response, exception, spider)
參數:
response ( response 對象)–引發異常時正在處理的響應
exception (Exception對象)–引發的異常
spider ( spider 對象)–引發異常的蜘蛛
當 Spider 或 processspideroutput() 方法(來自先前的 Spider 中間件)引發異常時,將調用此方法。
processspiderexception() 應該返回 None 或可迭代的 Request , dict 或 Item 對象。
如果返回 None ,則 Scrapy 將繼續處理此異常,并在以下中間件組件中執行任何其他 processspiderexception() ,直到沒有剩余中間件組件且異常到達引擎為止(記錄并丟棄該異常)。
如果返回可迭代,則從下一個蜘蛛中間件開始, processspideroutput() 管道將啟動,并且不會調用其他 processspiderexception() 。
processstartrequests(start_requests, spider)
參數:
start_requests (可迭代的 Request )–啟動請求
spider ( spider 對象)–啟動請求所屬的蜘蛛
此方法是由 Spider 的啟動請求調用的,其工作原理與 processspideroutput() 方法類似,不同之處在于它沒有關聯的響應,并且僅返回請求(不返回項目)。
它接收一個可迭代的(在 start_requests 參數中),并且必須返回另一個可迭代的 Request 對象。
在實際使用過程中, Spider Middleware 的使用率并不如 Downloader Middleware 高,小編這里就不做示例了,在一些必要的情況下, Spider Middleware 可以用作一些數據處理。
以上是Spider Middleware是什么有什么用的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。