阿布雲為我們提供了隧道代理IP的服務,通過阿布雲HTTP隧道的動態版可以讓我們的爬蟲很好的使用動態代理IP
由此可知我們可以得到requests接入代碼

1 # -*- coding:utf-8 -*- 2 import requests 3 4 # 要訪問的目標網頁 5 url = "http://httpbin.org/get" 6 7 # 代理服務器,根據購買的套餐,自行查看修改 8 proxy_host = "http-dyn.abuyun.com" 9 10 # 代理端口 11 proxy_prot = "9020" 12 13 # 代理隧道驗證信息 14 proxy_user = "H01234567890123D" # 購買隧道的通行證書 15 proxy_pass = "0123456789012345" # 購買隧道的通行秘鑰 16 17 proxy_meta = "http://%(user)s:%(pass)s@%(host)s:%(port)s"%{ 18 "host":proxy_host, 19 "port":proxy_prot, 20 "user":proxy_user, 21 "pass":proxy_pass, 22 } 23 24 proxies = { 25 "http":proxy_meta, 26 "https":proxy_meta, 27 } 28 29 response = requests.get(url=url,proxies=proxies) 30 print(response.status_code) 31 print(response.text)
得到結果為:
1 200 2 { 3 "args": {}, 4 "headers": { 5 "Accept": "*/*", 6 "Accept-Encoding": "gzip, deflate", 7 "Connection": "close", 8 "Host": "httpbin.org", 9 "User-Agent": "python-requests/2.18.1" 10 }, 11 "origin": "60.207.237.111", 12 "url": "http://httpbin.org/get"}
最后由於阿布雲的proxy地址是不變的(實際是動態ip),實際上,得到上邊的proxies后,直接使用那個地址,進行proxies=proxies 設置即可。
同時阿布雲還提供爬蟲框架Scrapy的接入代碼

1 import base64 2 3 # 代理服務器,根據購買的套餐,自行查看修改 4 proxyServer = "http://http-dyn.abuyun.com:9020" 5 6 # 代理隧道驗證信息 7 proxy_user = "H01234567890123D" # 購買隧道的通行證書 8 proxy_pass = "0123456789012345" # 購買隧道的通行秘鑰 9 10 proxyAuth = "Basic " + base64.urlsafe_b64encode(bytes((proxy_user + ":" + proxy_pass), "ascii")) 11 proxyAuth = proxyAuth.decode("utf8") 12 13 14 class ProxyMiddleware(object): 15 def process_request(self,request,spider): 16 request.meta["proxy"] = proxyServer 17 request.headers["Proxy-Authorization"] = proxyAuth
由於,在阿布雲購買的是最基礎的代理,即每秒 5 個請求,又因為 Scrapy 默認的並發數是 16 個,所以需要對 Scrapy 請求數量進行一下限制,可以設置每個請求的延遲時間為 0.2s ,這樣一秒就剛好請求 5 個,最后啟用上面的代理中間件類即可:
1 AUTOTHROTTLE_ENABLED = True 2 DOWNLOAD_DELAY = 0.2 # 每次請求間隔時間 3 4 # 啟用阿布雲代理中間件 5 DOWNLOADER_MIDDLEWARES = { 6 'maoyan.middlewares.ProxyMiddleware': 301, 7 }