一般情況下,我并不建議使用自己的IP來爬取網站,而是會使用代理IP。
原因很簡單:爬蟲一般都有很高的通路頻率,當伺服器監測到某個IP以過高的通路頻率在進行通路,它便會認為這個IP是一隻“爬蟲”,進而封鎖了我們的IP。
那我們爬蟲對IP代理的要求是什麼呢?
- 1、代理IP數量較多,可以減低被封鎖的機率;
- 2、IP生命周期較短,因為沒錢o(´^`)o。
接下來,就講一下從購買代理IP到urllib配置代理IP的全過程。
購買代理IP:
代理IP的中間商有很多,我們以無憂代理為例。

- 這裡共有4套餐,我們選擇第一個“¥10”套餐,進入詳情界面:
Python爬蟲實戰——反爬政策之代理IP【無憂代理】 -
竟然更便宜了,隻要8.5???買!
(我真的沒拿無憂代理的廣告費......)
- 購買成功之後,我們點選“建立API接口”:
Python爬蟲實戰——反爬政策之代理IP【無憂代理】 - 擷取HTTP爬蟲代理IP的API連結:
Python爬蟲實戰——反爬政策之代理IP【無憂代理】
配置代理IP:
- 我們先調用下接口試一下:
import urllib.request as ur
proxy_address = ur.urlopen('http://api.ip.data5u.com/dynamic/get.html?order=d314e5e5e19b0dfd19762f98308114ba&sep=4').read()
print(proxy_address)
- 由于傳回結果為位元組,我們還需對其進行
格式轉換,以及去空格:utf-8
proxy_address = proxy_address.decode('utf-8').strip()
輸出如下:
- 建立proxy_handler:
proxy_handler = ur.ProxyHandler(
{
'http': proxy_address
}
)
- 建立opener對象:
proxy_opener = ur.build_opener(proxy_handler)
- 使用代理IP進行通路并輸出:
request = ur.Request(url='https://edu.csdn.net/')
# open == urlreponse,隻是進行了代理IP封裝
reponse = proxy_opener.open(request).read().decode('utf-8')
print(reponse)
全文完整代碼:
import urllib.request as ur
proxy_address = ur.urlopen('http://api.ip.data5u.com/dynamic/get.html?order=d314e5e5e19b0dfd19762f98308114ba&sep=4').read().decode('utf-8').strip()
# print(proxy_address)
# 建立proxy_handler
proxy_handler = ur.ProxyHandler(
{
'http': proxy_address
}
)
# 建立opener對象
proxy_opener = ur.build_opener(proxy_handler)
request = ur.Request(url='https://edu.csdn.net/')
# open == urlreponse,隻是進行了代理IP封裝
reponse = proxy_opener.open(request).read().decode('utf-8')
print(reponse)
為我心愛的女孩~~
一個佛系的部落格更新者,随手寫寫,看心情吧 (っ•̀ω•́)っ✎⁾⁾