相對免費代理來講,付費代理的穩定性更高。本節將介紹爬蟲付費代理的相關使用過程。
html
付費代理分爲兩類:
python
一類提供接口獲取海量代理,按天或者按量收費,如訊代理;json
一類搭建了代理隧道,直接設置固定域名代理,如阿布雲代理。服務器
本節分別以兩家表明性的代理網站爲例,講解這兩類代理的使用方法,併發
訊代理的代理效率較高(做者親測),官網爲http://www.xdaili.cn/,以下圖所示。
app
訊代理上可供選購的代理有多種類別,包括以下幾種(參考官網介紹)。ide
優質代理:它適合對代理IP需求量很是大,但能接受較短代理有效時長(10~30分鐘)的小部分不穩定的客戶。測試
獨享動態:它適合對代理IP穩定性要求很是高且能夠自主控制的客戶,支持地區篩選。網站
獨享秒切:它適合對代理IP穩定性要求很是高且能夠自主控制的客戶,可快速獲取IP,地區隨機分配。url
動態混撥: 它適合對代理IP需求量大、代理IP使用時效短(3分鐘)、切換快的客戶。
優質定製:若是優質代理的套餐不能知足你的需求,請使用定製服務。
通常選擇第一類別優質代理便可,這種代理的量比較大,可是其穩定性不高,一些代理不可用。因此這種代理的使用就須要藉助於上一節所說的代理池,本身再作一次篩選,以確保代理可用。
讀者能夠購買一天時長來試試效果。購買以後,訊代理會提供一個API來提取代理,以下圖所示。
好比,這裏提取API爲http://www.xdaili.cn/ipagent/greatRecharge/getGreatIp?spiderId=da289b78fec24f19b392e04106253f2a&orderno=YZ20177140586mTTnd7&returnType=2&count=20,可能已過時,在此僅作演示。
在這裏指定了提取數量爲20,提取格式爲JSON,直接訪問連接便可提取代理,結果以下圖所示。
接下來咱們要作的就是解析這個JSON,而後將其放入代理池中。
若是信賴訊代理的話,咱們也能夠不作代理池篩選,直接使用代理。不過我我的仍是推薦使用代理池篩選,以提升代理可用概率。
根據上一節代理池的寫法,咱們只須要在Crawler中再加入一個crawl
開頭的方法便可。方法實現以下所示:
def crawl_xdaili(self):
"""
獲取訊代理
:return: 代理
"""
url = 'http://www.xdaili.cn/ipagent/greatRecharge/getGreatIp?spiderId=da289b78fec24f19b392e04106253f2a&orderno=YZ20177140586mTTnd7&returnType=2&count=20'
html = get_page(url)
if html:
result = json.loads(html)
proxies = result.get('RESULT')
for proxy in proxies:
yield proxy.get('ip') + ':' + proxy.get('port')
這樣咱們就在代理池中接入了訊代理。獲取訊代理的結果以後,解析JSON,返回代理便可。
代理池運行以後就會抓取和檢測該接口返回的代理,若是代理可用,那麼分數就會被設爲100,經過代理池接口便可獲取到這些可用代理。
阿布雲代理提供了代理隧道,代理速度快且很是穩定,其官網爲https://www.abuyun.com/,以下圖所示。
阿布雲代理主要分爲兩種:專業版和動態版,另外還有定製版(參考官網介紹)。
專業版:多個請求鎖定一個代理IP,海量IP資源池需求,近300個區域全覆蓋,代理IP可連續使用1分鐘,它適用於請求IP連續型業務。
動態版:每一個請求分配一個隨機代理IP,海量IP資源池需求,近300個區域全覆蓋,它適用於爬蟲類業務。
定製版:它能夠靈活按照需求定製,定製IP區域,定製IP使用時長,定製IP每秒請求數。
關於專業版和動態版的更多介紹能夠查看官網:https://www.abuyun.com/http-proxy/dyn-intro.html。
對於爬蟲來講,咱們推薦使用動態版,購買以後能夠在後臺看到代理隧道的用戶名和密碼,以下圖所示。
整個代理的鏈接域名爲proxy.abuyun.com,端口爲9020,它們均是固定的,可是每次使用以後IP都會更改,該過程其實就是利用了代理隧道實現(參考官網介紹)。
雲代理經過代理隧道的形式提供高匿名代理服務,支持HTTP/HTTPS協議。
雲代理在雲端維護一個全局IP池供代理隧道使用,池中的IP會不間斷更新,以保證同一時刻IP池中有幾十到幾百個可用代理IP。
須要注意的是,代理IP池中部分IP可能會在當天重複出現屢次。
動態版HTTP代理隧道會爲每一個請求從IP池中挑選一個隨機代理IP。
無須切換代理IP,每個請求分配一個隨機代理IP。
HTTP代理隧道有併發請求限制,默認每秒只容許5個請求。若是須要更多請求數,請額外購買。
注意,默認套餐的併發請求是5個。若是須要更多請求數,則須另外購買。
使用教程的官網連接爲:https://www.abuyun.com/http-proxy/dyn-manual-python.html。教程提供了requests、urllib、Scrapy的接入方式。
如今咱們以requests爲例,接入代碼以下所示:
import requests
url = 'http://httpbin.org/get'
# 代理服務器
proxy_host = 'proxy.abuyun.com'
proxy_port = '9020'
# 代理隧道驗證信息
proxy_user = 'H01234567890123D'
proxy_pass = '0123456789012345'
proxy_meta = 'http://%(user)s:%(pass)s@%(host)s:%(port)s' % {
'host': proxy_host,
'port': proxy_port,
'user': proxy_user,
'pass': proxy_pass,
}
proxies = {
'http': proxy_meta,
'https': proxy_meta,
}
response = requests.get(url, proxies=proxies)
print(response.status_code)
print(response.text)
這裏其實就是使用了代理認證,在前面咱們也提到過相似的設置方法,運行結果以下:
200
{
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Connection": "close",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.18.1"
},
"origin": "60.207.237.111",
"url": "http://httpbin.org/get"
}
輸出結果的origin
即爲代理IP的實際地址。這段代碼能夠屢次運行測試,咱們發現每次請求origin
都會在變化,這就是動態版代理的效果。
這種效果其實跟以前的代理池的隨機代理效果相似,都是隨機取出了一個當前可用代理。可是,與維護代理池相比,此服務的配置簡單,使用更加方便,更省時省力。在價格能夠接受的狀況下,我的推薦此種代理。
以上內容即是付費代理的相關使用方法,付費代理穩定性比免費代理更高。讀者能夠自行選購合適的代理。