1. 代理簡介
很多網站都會檢測某一段時間某個IP的訪問次數,如果同一個IP訪問過於頻繁,那么該網站就會禁止來自該IP的訪問,針對這種情況,可以使用代理服務器,每隔一段時間換一個馬甲。“他強任他強,勞資會變翔”哈哈哈。
免費的開放代理獲取無成本,我們可以收集這些免費代理,測試后如果可以用,用在爬蟲上。
免費短期代理網站舉例:
名詞解釋:
免費短期代理網站分高匿和透明
【高匿】:代表服務器追蹤不到你原來的IP;
【透明】:代表服務器可以追蹤到你的代理IP和原來的IP;
類型表示支持的類型:HTTP或者HTTPS
【存活的時間】:表示在這個期間可用
2.設置代理服務器
urllib.request中通過ProxyHandler來設置使用代理服務器,下面代碼說明如何使用自定義opener來使用代理:
例子1:單個代理IP
1 import urllib.request 2
3 # 構建兩個代理Handler,一個有代理IP,一個沒有
4 httpproxy_handler = urllib.request.ProxyHandler({"http": "211.141.111.114:61395"}) 5 nullproxy_handler = urllib.request.ProxyHandler({}) 6 proxy_switch = True # 定義一個代理開關
7
8 # 通過urllib.request.build_opener() 方法創建自定義opener對象
9 # 根據代理開關是否打開,使用不同的代理模式
10 if proxy_switch: 11 opener = urllib.request.build_opener(httpproxy_handler) 12 else: 13 opener = urllib.request.build_opener(nullproxy_handler) 14
15 request = urllib.request.Request("http://www.baidu.com") 16 response = opener.open(request) 17 print(response.read())
注意:
如果程序中所有的請求都使用自定義的opener, 可以使用urllib.install_opener()將自定義的opener定義為全局opener,表示之后凡是調用urlopen,都將使用自定義的opener。
例子2:代理IP列表隨機抽取
如果代理IP足夠多,就可以像隨機獲取User-Agent一樣,隨機選擇一個代理去訪問網站。
1 import urllib.request 2 import random 3
4 proxy_list = [ 5 {"http": "211.141.111.114:61395"}, 6 {"http": "61.135.217.7:80"}, 7 {"http": "171.39.74.97:8123"}, 8 {"http": "218.59.228.18:61976"}, 9 {"http": "221.224.136.211:35101"}, 10 ] 11
12 # 隨機選擇一個代理
13 proxy = random.choice(proxy_list) 14
15 # 使用選擇的代理構建代理處理器對象
16 httpproxy_handler = urllib.request.ProxyHandler(proxy) 17 opener = urllib.request.build_opener(httpproxy_handler) 18 request = urllib.request.Request("http://www.baidu.com") 19 response = opener.open(request) 20 print(response.read())
這些免費開放代理一般會有很多人都在使用,而且代理有壽命短,速度慢,匿名度不高,HTTP/HTTPS支持不穩定等缺點(免費沒好貨)。
所以,專業爬蟲工程師或爬蟲公司會使用高品質的私密代理,這些代理通常需要找專門的代理供應商購買,再通過用戶名/密碼授權使用。