很多網站會檢測某一段時間某個ip的訪問次數(通過流量統計,系統日誌等),如果訪問次數多的不像正常人,它會禁止這個ip的訪問,所以我們可以設置一些代理服務器,每隔一段時間換一個代理,就算ip被禁止,依然可以換個ip繼續爬取,urllib中通過ProxyHandler來設置使用代理服務器,下面代碼說明如何使用自定義opener來使用代理:
from urllib import request
#沒有使用代理
url='http://httpbin.org/ip'
#resp=request.urlopen(url)
#print(resp.read())
#使用代理字典形式
#1.使用ProxyHandler:傳入代理構建一個handler
handler=request.ProxyHandler({"http":"136.228.128.14:61158"})
#2.使用上面創建的handler構建一個opener
opener=request.build_opener(handler)
#3.使用opener去發送一個請求
req=request.Request(url)
resp=opener.open(req)
print(resp.read())
常用的代理有:
- 快代理:http://www.kuaidaili.com
- 代理雲:http://www.dailiyun.com
- 西刺免費代理:http://www.xicidaili.com
查詢訪問服務器的IP地址,測試有無改變IP地址:httpbin.org
-
代理的原理:在請求目的服務器之前,先請求代理服務器,然後讓代理服務器去請求目的服務器,代理服務器拿到目的服務器的數據後,再轉發給我們
-
http://httpbin.org :這個網站可以方便的查看http請求的一些條款
-
在代碼中使用代理:
- 使用 urllib.request.ProxyHandler
- 傳入一個代理,這個代理是一個字典,字典的key依賴於代理服務器能夠接受的類型,一般是“http”或“https”,值是“IP:port”
- 使用上一步創建的“bandler”,以及‘request.build_opener’創建一個“opener”對象
- 使用上一步創建的“opener”,調用“open”函數,發起請求