1. 程式人生 > >Python破解反爬蟲的兩種方法

Python破解反爬蟲的兩種方法

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即為爬取結果