2017-07-15 59 views
0

我想創建一個迭代使用代理列表的程序,所以每個代理將從頭到尾使用,然後重新開始。在請求中使用代理的方式似乎如下。使用python請求與一個大代理列表

proxyDict = { 
       "http" : "http://177.86.8.166:3128", 
       "http" : "http://177.223.187.126:3128" 
      } 

r = requests.get(url, headers=headers, proxies=proxyDict) 

我有一個像下面的代理列表。

177.86.8.166:3128 
177.69.237.53:3128 
177.223.187.126:3128 
177.101.172.14:3128 
177.185.114.89:53281 
177.128.192.125:8089 
177.128.210.250:8080 

我想過使用一個循環來將所有這些代理附加在內存中的proxyDict var中。比運行我的程序。這是最好的辦法。如果代理無法與另一個代理正常工作,我也想重複請求,並且這應該繼續,直到請求成功爲止。我正在考慮使用try catch塊來實現這一點,這是最好的方法嗎?或者,還有更好的方法。

回答

0

我剛剛做了類似的事情,雖然我使用了grequests。一對夫婦的想法爲你..我會超時添加到您的要求或您的代碼將掛起:

>>>> r = requests.get(url, headers=headers, proxies=my_proxy, timeout=5) 

每個請求都將有一個STATUS_CODE所以用它來檢查,如果該請求是成功的,我通常會嘗試幾次以防萬一有例如超時:

>>> import requests 
>>> r = requests.get('http://notarealsiteatall.org/status/404') 
>>> r.status_code 
404 

然後,如果請求說失敗5次,你可以移動到下一個代理。

if tries > 5: 
    my_proxy = new_proxy_server 

我剛剛創建了一個列表並做了一個for循環遍歷它們。