一般情況下,我並不建議使用自己的IP來爬取網站,而是會使用代理IP。
原因很簡單:爬蟲一般都有很高的訪問頻率,當服務器監測到某個IP以過高的訪問頻率在進行訪問,它便會認為這個IP是一只“爬蟲”,進而封鎖了我們的IP。
那我們爬蟲對IP代理的要求是什么呢?
- 1、代理IP數量較多,可以減低被封鎖的概率;
- 2、IP生命周期較短,因為沒錢o(´^`)o。
接下來,就講一下從購買代理IP到urllib配置代理IP的全過程。
購買代理IP:
代理IP的中間商有很多,我們以無憂代理為例。
- 這里共有4套餐,我們選擇第一個“¥10”套餐,進入詳情界面:
- 竟然更便宜了,只要8.5???買!
(我真的沒拿無憂代理的廣告費......) - 購買成功之后,我們點擊“創建API接口”:
- 獲取HTTP爬蟲代理IP的API鏈接:
配置代理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)
為我心愛的女孩~~