1. 程式人生 > 程式設計 >scrapy頭部修改的方法詳解

scrapy頭部修改的方法詳解

被Scrapy自動新增的頭部

在沒有任何配置的情況下,scrapy會對請求預設加上一些頭部資訊

Scrapy會通過配置檔案中的USER_AGENT配置,自動為頭部新增User-Agent,這條配置會被任何包含User-Agent的配置覆蓋

scrapy頭部修改的方法詳解

當請求經過下載器後,會被自動新增頭部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,*/*;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的理解,如有錯誤歡迎指正

到此這篇關於scrapy頭部修改的文章就介紹到這了,更多相關scrapy頭部修改內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!