爬取網站時請求被拒絕?scrapy輕松解決請求頭設置!就是不講道理
默認請求頭
命令行執行,新建爬蟲
scrapy startproject myspidercd myspider scrapy genspider scrapy_spider httpbin.org
我們通過對 https://httpbin.org/get?show_env=1 的請求,查看本次請求的瀏覽器信息,可以打開看一看是否是自己的瀏覽器信息
將返回的文本復制到 https://www.json.cn/ 格式化成便於查看的json格式,下面操作亦然,不再贅述。
修改請求頭
既然這樣的話,那我們修改下請求頭,達到偽造的效果
打開下面的鏈接,選一個自己喜歡的請求頭
http://www.useragentstring.com/pages/useragentstring.php?name=Chrome
這裏使用chrome瀏覽器請求頭
再次訪問,發現我們的請求頭已經成功更換
"User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36",
方式三:鏈接設置
此方法對單個鏈接生效, 只是此次請求的這個鏈接享受
在Request方法中設置headers參數
方法四:中間件設置
此方法可以從整個項目中去修改請求頭的設置規則,變化多端,不同的寫法,可以配置出不同的設置方式,下面是一個比較簡單的示例
我們參考scrapy默認處理請求頭的中間件
from scrapy.downloadermiddlewares.useragent import UserAgentMiddleware
編寫中間件
作用優先級
如果作如下設置
# settings.pyUSER_AGENT = "settings"
# scrapy_spider.pycustom_settings = { "USER_AGENT": "custom_settings", }headers={"User-Agent": "header"}
運行效果為:
"User-Agent":"header"
註釋掉headers
"User-Agent":"custom_settings"
註釋掉custom_settings
"User-Agent":"custom_settings"
註釋掉settings
"User-Agent":"Scrapy/1.1.2 (+http://scrapy.org)"
可見優先級為:
headers > custom_settings > settings.py > Scrapy默認
註意
註意User-Agent參數的寫法
headers={"User-Agent": USER_AGENT})
如果寫錯了,很可能發生奇怪的事情
headers={"User_Agent": USER_AGENT}
請求頭中多了Scrapy…
"User-Agent":"Scrapy/1.1.2 (+http://scrapy.org),Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36",
其實,很好區分:
User-Agent: 瀏覽器請求頭參數,html代碼中經常用-
USER_AGENT: python變量
建議:
每次寫瀏覽器參數,如果怕寫錯就打開自己的瀏覽器,隨便測試一個頁面,從裏邊復制
作為從入門到實戰的我,踩過不少坑,此文做了簡單的總結,也分享了幾個比較實用的網站。希望此文的分享能給大家提供一個少走彎路的捷徑,那麽此文的價值也就體現了。
順便打個廣告
最近想寫一個開源庫,chinesename中文取名,已經實現基本的取名,不過名字需要優化,如果有想一起搞事情的同學,可以一起
爬取網站時請求被拒絕?scrapy輕松解決請求頭設置!就是不講道理