Python破解反爬蟲的兩種方法
阿新 • • 發佈:2018-12-04
Python破解反爬蟲的兩種方法
由於有很多企業為了減輕網頁負荷,抵禦爬蟲愛好者,設定了許多方法阻擋爬蟲,本人也只是個菜雞,
目前只會兩種方法繞過反爬蟲機制,本文也就只列出這兩種方法。
1.偽裝瀏覽器
由於爬蟲多直接由python指令碼直接訪問網頁,部分企業也就由此建立了識別來訪者是否為Python指令碼訪問,所以,我們可以使用偽裝瀏覽器的方式對此種防禦方式進行破解。
from urllib.request import urlopen from urllib import request url = "http://www.cbrc.gov.cn/chinese/jrjg/index.html" # 如何偽裝成瀏覽器訪問? # 1. 定義一個真實瀏覽器的代理名稱 user_agent = "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0" # 2. 寫到請求頁面的header裡面去 req = request.Request(url,headers={'User-Agent': user_agent} ) # 3. 開啟網頁, 獲取內容 print(urlopen(req).read().decode('utf-8'))
關於 user-agent 需要你檢視你的瀏覽器,調出如下圖所示,右側User-Agent即為。
2.IP代理
由於爬蟲常常需要多次爬取某一網站,網站則會根據訪問次數判斷是否為爬蟲,若次數很多時,將會封禁此時使用的IP,應對方法為尋找代理IP,若封禁某一IP,則使用代理IP繼續爬取。
實現步驟:
- 1). 呼叫
urllib.request.ProxyHandler(proxies=None)
; — 類似理解為Request
物件 - 2). 呼叫
opener
— 類似與urlopen
, 這個是定製的 - 3). 安裝
opener
- 4). 代理IP的選擇
from urllib import request from urllib.error import URLError # url = 'https://www.whatismyip.com/' url = 'https://httpbin.org/get' proxy = {'https':'171.221.239.11:808', 'http':'218.14.115.211:3128'} user_agent = 'Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0' # 1).呼叫urllib.request.ProxyHandler(proxies=None); --- 類似理解為Request物件 proxy_support = request.ProxyHandler(proxy) # 2).呼叫Opener - -- 類似與urlopen, 這個是定製的 opener = request.build_opener(proxy_support) # 偽裝瀏覽器 opener.addheaders = [('User-Agent',user_agent)] # 3).安裝Opener request.install_opener(opener) # 4).代理IP的選擇 response = request.urlopen(url) content = response.read().decode('utf-8') #content即為爬取結果