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