天天看點

Python反爬蟲措施之User-Agent

在工作中進行爬蟲網站時,一般網站是不允許被爬蟲通路的,經常會需要提供User-Agent。為什麼要提供User-agent?

因為它表示請求者的資訊,可以搜集User-agent并儲存,爬取過程中動态更換在User-agent,可以僞裝成浏覽器的形式。如果不提供User-Agent,會導緻爬蟲在請求網頁時,請求失敗。

什麼是User-Agent

User-Agent中文名為使用者代理,簡稱 UA,是Http協定中的一部分,屬于頭域的組成部分。它是一個特殊字元串頭,使得伺服器能夠識别客戶使用的作業系統及版本、CPU 類型、浏覽器及版本、浏覽器渲染引擎、浏覽器語言、浏覽器插件等。下面我們看一下圖檔便知。

我們現先打開一個網頁,然後按下F12,選擇network,再點選headers就可以看到User-Agent了。

Python反爬蟲措施之User-Agent

當我們使用爬蟲請求網頁時,我們不僞裝請求頭,直接使用requests的GET直接請求:

.

import requests
res = requests.get('https://www.zhihu.com/')
print(res.request.headers)
print(res.status_code)
           

運作結果:

Python反爬蟲措施之User-Agent

我們使用requests的GET請求通路知乎網頁,輸出結果可以看到,User-Agent直接顯示為requests的版本号。但是,有沒有注意到,傳回的狀态碼既然是400,這說明什麼?

知乎是設定了通過UA的反爬措施的,在爬蟲中進行request請求,很多時候,都需要添加請求頭,不然伺服器會認為是非法的請求,進而拒絕你的通路。

我們找一個Chrome的User-Agent,隻需在位址欄中輸入:about:version即可,如下圖所示:

Python反爬蟲措施之User-Agent

User-Agent值是用來幫助伺服器識别使用者使用的作業系統、浏覽器、浏覽器版本等等資訊的,而我們使用爬蟲時也大多會帶上這個請求頭。下面使用谷歌這個User-Agent值:

import requests
headers = {'user-agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'}
res = requests.get('https://www.zhihu.com/',headers=headers)
print(res.request.headers)
print(res.status_code)
           

運作結果:

Python反爬蟲措施之User-Agent

輸出結果可以看出繞過知乎這道反爬措施,隻需要僞裝成浏覽器,将headers設定成浏覽器中設定的值。

如果同一個網站被相同浏覽器頻繁通路,很容易被網站識别為爬蟲程式,是以一般通過使用多個User-Agent随機調用的方式,可以有效避免同一個請求頭通路網站。

調用python中的useragent子產品

在使用 Python 做爬蟲的時候,我們需要僞裝頭部資訊騙過網站的防爬政策,Python 中的第三方子產品 fake_useragent 就很好的解決了這個問題,它将給我們傳回一個随機封裝了好的頭部資訊,我們直接使用即可。

fake_useragent安裝

簡單來說,fake_useragent能靈活的幫助我們生成user-agent,解決了user-agent煩惱。

pip install fake-useragent

安裝完成後,我們現了解一下fake_useragent的使用,生成指定浏覽器的user-agent:

import fake_useragent

# 執行個體化 user-agent 對象
ua = fake_useragent.UserAgent()
print(ua.chrome)
           

運作結果:

Python反爬蟲措施之User-Agent

如果要頻繁抓取一個網頁,每次都設定一樣的UA,這也會被網站懷疑,因為一個人可能不會短時間内通路千百次那個網站,是以我們要做的是随機換UA,我們可以從這個網站上拿取:

https://fake-useragent.herokuapp.com/browsers/0.1.11

把收集到UA放到清單,每次從中随機提取即可。

Python反爬蟲措施之User-Agent

我們還可以使用fake_useragent随機生成user-agent

import fake_useragent

# 執行個體化 user-agent 對象
ua = fake_useragent.UserAgent()
print(ua.random)
print(ua.random)
print(ua.random)
           

運作結果:

Python反爬蟲措施之User-Agent

總結

在Python爬蟲的過程中經常要模拟UserAgent, 是以自動生成UserAgent十分有用,fake-useragent是個很不錯的第三方庫,可以随機生成各種UserAgent。

Python反爬蟲措施之User-Agent

歡迎關注微信公衆号【程式猿編碼】,添加本人微信号(17865354792),回複:領取學習資料。或者回複:進入技術交流群。網盤資料有如下:

Python反爬蟲措施之User-Agent