1. 程式人生 > >爬取網站時請求被拒絕?scrapy輕松解決請求頭設置!就是不講道理

爬取網站時請求被拒絕?scrapy輕松解決請求頭設置!就是不講道理

scrapy 就是 setting 頁面 效果 useragent 基本 生效 request

技術分享圖片

默認請求頭

命令行執行,新建爬蟲

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輕松解決請求頭設置!就是不講道理