內置spider中間件含義

DepthMiddleware
classscrapy.contrib.spidermiddleware.depth.DepthMiddleware
DepthMiddleware是一個用於追蹤每個Request在被爬取的網站的深度的中間件。 其可以用來限制爬取深度的最大深度或類似的事情。
DepthMiddleware 可以通過下列設置進行配置(更多內容請參考設置文檔):
DEPTH_LIMIT - 爬取所允許的最大深度,如果爲0,則沒有限制。
DEPTH_STATS - 是否收集爬取狀態。
DEPTH_PRIORITY - 是否根據其深度對requet安排優先級

HttpErrorMiddleware
classscrapy.contrib.spidermiddleware.httperror.HttpErrorMiddleware
過濾出所有失敗(錯誤)的HTTP response,因此spider不需要處理這些request。 處理這些request意味着消耗更多資源,並且使得spider邏輯更爲複雜。
根據 HTTP標準 ,返回值爲200-300之間的值爲成功的resonse。
如果您想處理在這個範圍之外的response,您可以通過 spider的 handle_httpstatus_list 屬性或 HTTPERROR_ALLOWED_CODES 設置來指定spider能處理的response返回值。
例如,如果您想要處理返回值爲404的response您可以這麼做:
class MySpider(CrawlSpider):
    handle_httpstatus_list = [404]
Request.meta 中的 handle_httpstatus_list 鍵也可以用來指定每個request所允許的response code。
不過請記住,除非您知道您在做什麼,否則處理非200返回一般來說是個糟糕的決定。
HttpErrorMiddleware settings
HTTPERROR_ALLOWED_CODES
默認: []
忽略該列表中所有非200狀態碼的response。
HTTPERROR_ALLOW_ALL
默認: False
忽略所有response,不管其狀態值。

OffsiteMiddleware
classscrapy.contrib.spidermiddleware.offsite.OffsiteMiddleware
過濾出所有URL不由該spider負責的Request。
該中間件過濾出所有主機名不在spider屬性 allowed_domains 的request。
當spider返回一個主機名不屬於該spider的request時, 該中間件將會做一個類似於下面的記錄:
DEBUG: Filtered offsite request to 'www.othersite.com': <GET http://www.othersite.com/some/page.html>
爲了避免記錄太多無用信息,其將對每個新發現的網站記錄一次。因此,例如, 如果過濾出另一個 www.othersite.com 請求,將不會有新的記錄。 但如果過濾出 someothersite.com 請求,仍然會有記錄信息(僅針對第一次)。
如果spider沒有定義 allowed_domains 屬性,或該屬性爲空, 則offsite 中間件將會允許所有request。
如果request設置了 dont_filter 屬性, 即使該request的網站不在允許列表裏,則offsite中間件將會允許該request。

RefererMiddleware
classscrapy.contrib.spidermiddleware.referer.RefererMiddleware
根據生成Request的Response的URL來設置Request Referer 字段。
RefererMiddleware settings
REFERER_ENABLED
0.15 新版功能.
默認: True
是否啓用referer中間件。

UrlLengthMiddleware
classscrapy.contrib.spidermiddleware.urllength.UrlLengthMiddleware
過濾出URL長度比URLLENGTH_LIMIT的request。
UrlLengthMiddleware 可以通過下列設置進行配置(更多內容請參考設置文檔):
URLLENGTH_LIMIT - 允許爬取URL最長的長度.
 

 

 

參照官方文檔:https://scrapy-chs.readthedocs.io/zh_CN/0.24/topics/spider-middleware.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章