前言 爬蟲程式會消耗網站伺服器系統資源,因此有些網站會檢查偵測網站訪問是否為爬蟲程式,並進一步阻擋爬蟲程式,常見的像是封鎖IP來阻擋請求。
本文介紹一個Python套件fake_useragent,將爬蟲程式偽裝為瀏覽器提出請求訪問網站。
什麼是User-Agent User-Agnet(使用者代理,簡稱UA),會告訴網站伺服器,你是透過什麼工具(作業系統、瀏覽器名稱、瀏覽器版本、渲染引擎、外掛程式…等資訊)發送請求的。
偽裝User-Agent 我們先來看一下,使用Python requests套件直接提出請求,預設的Header如下:
1 2 3 4 5 import requestsresponse = requests.get('https://www.google.com) print(response.request.headers) {' User-Agent': ' python-requests/2.30 .0 ', ' Accept-Encoding': ' gzip, deflate', ' Accept': ' */*', ' Connection': ' keep-alive'}
預設的User-Agent是python-requests/2.30.0
,等於直接告訴對方伺服器我就是Python程式。
所以送出請求前,我們可以先修改User-Agent,偽裝為一般瀏覽器提出的請求,避免被對方識別為爬蟲程式而被封鎖。
fake_useragent套件 fake_useragnet是Python的第三方套件,它可以幫助我們將程式加上Uesr-Agent,偽裝為指定或隨機生成瀏覽器提出訪問網站請求。
安裝fake_useragnet pip安裝
1 2 3 4 5 6 7 8 pip install fake_useragent pip install -U fake_useragent pip show fake_useragent
Usage 產生指定瀏覽器的User-Agnet
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 from fake_useragent import UserAgentua = UserAgent() print (ua.ie)print (ua['Internet Explorer' ])print (ua.msie)print (ua.google)print (ua.chrome)print (ua['google chrome' ])print (ua.firefox)print (ua.ff)print (ua.safari)print (ua.opera)'Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; de) Presto/2.9.168 Version/11.52'
爬蟲程式最實用的,是要有一定的隨機性,可用random
隨機產生Agent-User,範例如下:
1 2 3 4 5 6 7 8 9 10 11 from fake_useragent import UserAgentua = UserAgent() print (ua.random)print (ua.random)print (ua.random)
爬蟲程式中偽裝User-Agnet範例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import requestsimport fake_useragent import UserAgentua = UserAgent() user_agent = ua.random url = 'https://www.xxxxx.com/' response = requests.get(url=url, headers={ 'user-agent' : user_agent.random }) if response.status_code == 200 : ... else : ...