ProxyHandler處理器(代理):
很多網站會檢測某一段時間某個IP的訪問次數(通過流量統計,系統日誌等),如果訪問次數多的不像正常人,它會禁止這個lP的訪問。
所以我們可以設置一些代理服務器,每隔一段時間換一個代理,就算IP被禁止,依然可以換個IP繼續爬取。
urllib中通過ProxyHandler來設置使用代理服務器,下面代碼說明如何使用自定義opener來使用代理
- 代理的原理:在請求目的網站之前,先請求代理服務器,然後讓代理服務器去請求目的網站,代理服務器拿到目的網站的數據後,再轉發給我們的代碼。
- http://httpbin.org:這個網站可以方便的查看http請求的一些參數。比如本機在外網中的IP地址
- 在代碼中使用代理:
- 使用
urllib.request.ProxyHandler
,傳入一個代理,這個代理是一個字典,字典的key依賴於代理服務器能夠接收的類型,一般是http
或者https
,值是ip:port
。 - 使用上一步創建的
handler
,以及request.build_opener
創建一個opener
對象。 - 使用上一步創建的
opener
,調用open
函數,發起請求。
- 使用
免費代理網站:
示例代碼如下:
from urllib import request
# 沒有使用代理的本機外網ip地址爲120.229.8X.XX
url = 'http://www.httpbin.org/ip'
resp = request.urlopen(url)
print(resp.read()) # 120.229.8X.XX
# 使用代理的
# 1、使用ProxyHandler,傳入代理,構建一個handler
handler = request.ProxyHandler({'http':'122.136.212.132:53281'})
# 2、使用上面創建的handler構建一個opener
opener = request.build_opener(handler)
# 3、使用opener去發送一個請求
resp1 = opener.open(url)
print(resp1.read())