文章目錄
- 被Scrapy自動添加的頭部
- 配置settings.py檔案中默認的頭部
- 在Request中設定頭部
- 在中間件中配置
- referer中間件
- 優先級分析
被Scrapy自動添加的頭部
在沒有任何配置的情況下,scrapy會對請求默認加上一些頭部資訊
- Scrapy會通過組態檔中的USER_AGENT配置,自動為頭部添加User-Agent,這條配置會被任何包含User-Agent的配置覆寫

- 當請求經過下載器后,會被自動添加頭部
Accept-Encoding: gzip,deflate, 會被任意包含Accept-Encoding的頭部配置覆寫
配置settings.py檔案中默認的頭部
#DEFAULT_REQUEST_HEADERS = {
# 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
# 'Accept-Language': 'en'
#}
當這個配置屬于注釋狀態時,頭部被設定為Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8與
Accept-Language: en,可以通過取消注釋修改或增刪其中的內容
-
優先級
- 會被Request和中間件中的頭部配置覆寫
- 可以覆寫scrapy自動添加的User-Agent和Accept-Encoding
-
可以在爬蟲中通過
custom_settings設定配置僅在當前爬蟲生效class XXXSpider(scrapy.Spider): ... custom_settings = { DEFAULT_REQUEST_HEADERS = {...} } ....
在Request中設定頭部
當給引擎回傳Request時,可以為他配置頭部
...
def parse(self):
headers = {
...
}
yield scrapy.Request(url, headers=headers)
- 優先級
- Request中設定的header會和settings.py檔案中的默認頭部合并到一起,如果有重復的配置,那么會覆寫那條配置
- 會被中間件中的配置覆寫
在中間件中配置
當Request請求通過下載中間件發往下載器時,可以通過下載中間件配置頭部
class XXXDownloaderMiddleware
def process_request(self, request, spider):
request.headers["key"] = value
return None
還需要在組態檔中啟用下載中間價
DOWNLOADER_MIDDLEWARES = {
'project.middlewares.XXXDownloaderMiddleware': 543,
}
- 優先級
- 會覆寫除了Referer以外的所有頭部配置
referer中間件
當存在多次請求時,referer中間件會自動幫Request的頭部中的referer加上上一次請求的url
-
優先級
- 最高,會在所有頭部配置完之后,添加referer
- 除了只請求一次沒有referer的情況,就算在其他頭部配置中設定了referer也會被referer中間件覆寫
-
關閉referer中間件
在組態檔中添加
REFERER_ENABLED=False即可關閉
優先級分析
Scrapy自動添加的User-Agent與Accept-Encoding < 組態檔中的默認配置DEFAULT_REQUEST_HEADERS < Request中修改的header < 中間件中添加的header < referer中間件添加的referer
此篇文章僅表示自己對scrapy的理解,如有錯誤歡迎指正
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/230309.html
標籤:python
