什么是代理?
代理(英語:Proxy),也稱網(wǎng)絡代理,是一種特殊的網(wǎng)絡服務,允許一個網(wǎng)絡終端(一般為客戶端)通過這個服務與另一個網(wǎng)絡終端(一般為服務器)進行非直接的連接。一些網(wǎng)關、路由器等網(wǎng)絡設備具備網(wǎng)絡代理功能。一般認為代理服務有利于保障網(wǎng)絡終端的隱私或安全,防止攻擊。(百度百科)
簡單來說,代理就是不直接訪問目標而是連接另一臺終端通過其訪問目標,實現(xiàn)IP的變化,對于一些對IP有限制的網(wǎng)站爬取非常有用
為什么用代理
很多網(wǎng)站會檢測某一段時間某個IP的訪問次數(shù)(通過流量統(tǒng)計,系統(tǒng)日志等),如果訪問次數(shù)多的不像正常人,它會禁止這個IP的訪問。
所以我們可以設置一些代理服務器,每隔一段時間換一個代理,就算IP被禁止,依然可以換個IP繼續(xù)爬取
使用代理流程
代理的使用大概可以分為四步
1.構建處理器handler(代理IP)
2.使用處理器構建連接方法(build_opener)
3.構建請求
4.使用連接方法中的open函數(shù)打開請求
其中最重要的是第一步構建處理器的ProxyHandler函數(shù)
ProxyHandler函數(shù)
urllib中通過ProxyHandler來設置使用代理服務器,下面代碼說明如何使用自定義opener來使用代理:
from urllib import request
# 這個是沒有使用代理的
#返回結(jié)果為本機的網(wǎng)絡IP
# resp = request.urlopen('http://httpbin.org/ip')
# print(resp.read().decode("utf-8"))
# 這個是使用了代理的
#代理成功后返回結(jié)果為設置的IP
handler = request.ProxyHandler({"http":"111.177.190.14:9999"})
opener = request.build_opener(handler)
req = request.Request("http://httpbin.org/ip")
resp = opener.open(req)
print(resp.read())
常見免費代理網(wǎng)站:
- 西刺免費代理IP:http://www.xicidaili.com/
- 快代理:http://www.kuaidaili.com/
- 代理云:http://www.dailiyun.com/
當然,便宜沒好貨,免費的容易出現(xiàn)連接不上、連接不穩(wěn)定,因此如果要做大型爬蟲還是建議購買代理,價格也并不貴!