scrapy頭部修改的方法詳解
被Scrapy自動(dòng)添加的頭部
在沒(méi)有任何配置的情況下,scrapy會(huì)對(duì)請(qǐng)求默認(rèn)加上一些頭部信息
Scrapy會(huì)通過(guò)配置文件中的USER_AGENT配置,自動(dòng)為頭部添加User-Agent,這條配置會(huì)被任何包含User-Agent的配置覆蓋
當(dāng)請(qǐng)求經(jīng)過(guò)下載器后,會(huì)被自動(dòng)添加頭部Accept-Encoding: gzip,deflate, 會(huì)被任意包含Accept-Encoding的頭部配置覆蓋
配置settings.py文件中默認(rèn)的頭部
#DEFAULT_REQUEST_HEADERS = { # 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', # 'Accept-Language': 'en' #}
當(dāng)這個(gè)配置屬于注釋狀態(tài)時(shí),頭部被設(shè)置為Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8與
Accept-Language: en,可以通過(guò)取消注釋修改或增刪其中的內(nèi)容
優(yōu)先級(jí)
- 會(huì)被Request和中間件中的頭部配置覆蓋
- 可以覆蓋scrapy自動(dòng)添加的User-Agent和Accept-Encoding
可以在爬蟲(chóng)中通過(guò)custom_settings設(shè)置配置僅在當(dāng)前爬蟲(chóng)生效
class XXXSpider(scrapy.Spider): ... custom_settings = { DEFAULT_REQUEST_HEADERS = {...} } ....
在Request中設(shè)置頭部
當(dāng)給引擎返回Request時(shí),可以為他配置頭部
... def parse(self): headers = { ... } yield scrapy.Request(url, headers=headers)
優(yōu)先級(jí)
- Request中設(shè)置的header會(huì)和settings.py文件中的默認(rèn)頭部合并到一起,如果有重復(fù)的配置,那么會(huì)覆蓋那條配置
- 會(huì)被中間件中的配置覆蓋
在中間件中配置
當(dāng)Request請(qǐng)求通過(guò)下載中間件發(fā)往下載器時(shí),可以通過(guò)下載中間件配置頭部
class XXXDownloaderMiddleware def process_request(self, request, spider): request.headers["key"] = value return None
還需要在配置文件中啟用下載中間價(jià)
DOWNLOADER_MIDDLEWARES = { 'project.middlewares.XXXDownloaderMiddleware': 543, }
優(yōu)先級(jí)
- 會(huì)覆蓋除了Referer以外的所有頭部配置
referer中間件
當(dāng)存在多次請(qǐng)求時(shí),referer中間件會(huì)自動(dòng)幫Request的頭部中的referer加上上一次請(qǐng)求的url
優(yōu)先級(jí)
- 最高,會(huì)在所有頭部配置完之后,添加referer
- 除了只請(qǐng)求一次沒(méi)有referer的情況,就算在其他頭部配置中設(shè)置了referer也會(huì)被referer中間件覆蓋
關(guān)閉referer中間件
在配置文件中添加REFERER_ENABLED=False即可關(guān)閉
優(yōu)先級(jí)分析
Scrapy自動(dòng)添加的User-Agent與Accept-Encoding < 配置文件中的默認(rèn)配置DEFAULT_REQUEST_HEADERS < Request中修改的header < 中間件中添加的header < referer中間件添加的referer
此篇文章僅表示自己對(duì)scrapy的理解,如有錯(cuò)誤歡迎指正
到此這篇關(guān)于scrapy頭部修改的文章就介紹到這了,更多相關(guān)scrapy頭部修改內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python利用socket實(shí)現(xiàn)多進(jìn)程的端口掃描器
作為開(kāi)發(fā)人員經(jīng)常需要查看服務(wù)的端口開(kāi)啟狀態(tài)判斷服務(wù)是否宕機(jī)。特別是部署的服務(wù)比較多的情況下,可能存在幾個(gè)甚至幾十個(gè)服務(wù)端口的占用。所以本文將利用socket實(shí)現(xiàn)多進(jìn)程的端口掃描器,需要的可以參考一下2022-12-12python中hasattr()、getattr()、setattr()函數(shù)的使用
這篇文章主要介紹了python中hasattr()、getattr()、setattr()函數(shù)的使用方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08python2.7的flask框架之引用js&css等靜態(tài)文件的實(shí)現(xiàn)方法
今天小編就為大家分享一篇python2.7的flask框架之引用js&css等靜態(tài)文件的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08Python虛擬環(huán)境遷移的實(shí)現(xiàn)
本文主要介紹了Python虛擬環(huán)境遷移的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03python 編碼中為什么要寫(xiě)類(lèi)型注解?
這篇文章主要介紹了python 編碼中為什么要寫(xiě)類(lèi)型注解,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-03-03python判斷一個(gè)集合是否包含了另外一個(gè)集合中所有項(xiàng)的方法
這篇文章主要介紹了python判斷一個(gè)集合是否包含了另外一個(gè)集合中所有項(xiàng)的方法,涉及Python集合操作的相關(guān)技巧,需要的朋友可以參考下2015-06-06python實(shí)現(xiàn)好看的時(shí)鐘效果
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)好看的時(shí)鐘效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-054種非常實(shí)用的python內(nèi)置數(shù)據(jù)結(jié)構(gòu)
這篇文章主要介紹了4種非常實(shí)用的python內(nèi)置數(shù)據(jù)結(jié)構(gòu),幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-04-04PyTorch搭建ANN實(shí)現(xiàn)時(shí)間序列風(fēng)速預(yù)測(cè)
這篇文章主要為大家介紹了PyTorch搭建ANN實(shí)現(xiàn)時(shí)間序列風(fēng)速預(yù)測(cè),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05