fake_useragent(偽造請求頭)


楔子

在爬蟲中進行request請求,很多時候,都需要添加請求頭,不然服務器會認為是非法的請求,從而拒絕你的訪問。

import requests
url = 'https://www.zhihu.com/question/315387406/answer/812734512'
response = requests.get(url=url)
print(response.status_code)  # 400

在添加請求頭中最常用的就是添加user-agent來講本次請求偽裝成瀏覽器。

User Agent 中文名為用戶代理,簡稱 UA,它是一個特殊字符串頭,使得服務器能夠識別客戶使用的操作系統及版本、CPU 類型、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等。

那么個人怎么搞這個user-agent呢,沒錯?八仙過海各顯神通,但一般都是用手來解決個人問題!

import requests

url = 'https://www.zhihu.com/question/315387406/answer/812734512'
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"
}
response = requests.get(url=url, headers=headers)
print(response.status_code) # 200


但,自從有了fake_useragent,媽媽再也不用擔心......


from fake_useragent import UserAgent
# 實例化 user-agent 對象
ua = UserAgent()

url = 'https://www.zhihu.com/question/315387406/answer/812734512'
headers = {"user-agent": ua.chrome} # 指定瀏覽器 user-agent
# 或者可以這樣寫
# headers = {"user-agent": UserAgent().random} # 一步到位,隨機生成一個 user-agent
response = requests.get(url=url, headers=headers)
print(response.status_code) # 200


About


什么是fake_useragent?


簡單來說,fake_useragent就像你的女朋友,能靈活的幫助我們生成user-agent,從而解放雙手。


install


pip install fake_useragent

update


pip install -U fake-useragent

查看版本


import fake_useragent
print(fake_useragent.VERSION) # 0.1.11

Usage


生成指定瀏覽器的user-agent


import fake_useragent

# 實例化 user-agent 對象
ua = fake_useragent.UserAgent()

# ua.ie
print(ua.ie) # Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; chromeframe/13.0.782.215)

# ua.msie
print(ua['Internet Explorer']) # Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727)

# ua.opera
print(ua.opera) # Opera/9.80 (Windows NT 6.1; U; en-US) Presto/2.7.62 Version/11.01

# ua.chrome
print(ua.chrome) # Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.16 Safari/537.36

# ua.google
print(ua['google chrome']) # Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36

# ua.firefox
print(ua.firefox) # Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/21.0.1

# ua.ff
print(ua.ff) # Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/29.0

# ua.safari
print(ua.safari) # Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5


隨機生成user-agent


import fake_useragent

# 實例化 user-agent 對象
ua = fake_useragent.UserAgent()
print(ua.random) # Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36
print(ua.random) # Mozilla/5.0 (compatible; MSIE 10.0; Macintosh; Intel Mac OS X 10_7_3; Trident/6.0)
print(ua.random) # Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36


每次都能隨機生成一個UA表示,大大增強了爬蟲的真實性。


其他用法


將遠程user agent json文件下載到本地


由於fake_useragent庫維護的user-agent json文件是在線的:


import fake_useragent
print(fake_useragent.settings.CACHE_SERVER)
'''

網址,其實是個json文件

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


既然是在線的json文件,那么我們就可將之下載到本地:


from fake_useragent import UserAgent, VERSION

location = './fake_useragent%s.json' % fake_useragent.VERSION
ua = UserAgent(path=location)


如果報錯fake_useragent.errors.FakeUserAgentError: Maximum amount of retries reached,重新運行代碼就好。


完事你就會發現在與腳本文件的同級目錄有了一個json文件。


如果僅是想跟新本地已保存的json文件


from fake_useragent import UserAgent
ua = UserAgent()
ua.update()

如果你不想緩存數據庫或沒有可寫文件系統


from fake_useragent import UserAgent
ua = UserAgent(cache=False)

如果不想使用托管的緩存服務器


from fake_useragent import UserAgent
ua = UserAgent(use_cache_server=False)

處理異常


fake_useragent.errors.FakeUserAgentError: Maximum amount of retries


from fake_useragent import UserAgent
# 禁用服務器緩存: use_cache_server=False
headers = {"User-Agent": UserAgent(use_cache_server=False).chrome}
response = requests.get(url=url, headers=headers)
print(response.status_code) # 200

FakeUserAgentError(‘Maximum amount of retries reached’


from fake_useragent import UserAgent
# 法1 禁用服務器緩存: use_cache_server=False
headers = {"User-Agent": UserAgent(use_cache_server=False).chrome}
# 法2 忽略ssl驗證
headers = {"User-Agent": UserAgent(verify_ssl=False).chrome}
# 法3 不緩存數據
headers = {"User-Agent": UserAgent(cache=False).chrome}
response = requests.get(url=url, headers=headers)
print(response.status_code) # 200

fake_useragent.errors.FakeUserAgentError: Maximum amount of retries reached


from fake_useragent import UserAgent, VERSION

location = './fake_useragent%s.json' % fake_useragent.VERSION
ua = UserAgent(path=location)


我在將在線的json文件寫入到本地時,由urllib.error.URLError: <urlopen error timed out>引起的報錯,重新運行就好,本地文件也下載完成。






see also: fake_useragent-github | fake_user_agent-pypi | Python爬蟲小技巧之偽造隨機的User-Agent | Python 使用 fake-useragent 庫時報錯的解決方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM