python捕捉线程错误_Pythonrequests多线程抓取出现HTTPConnectionPoolMaxretiresexceeded异常...
問題: Python requests 多線程抓取 出現HTTPConnectionPool Max retires exceeded異常
描述:
主要代碼如下:import threading
import requests
def get_info():
try:
res = requests.get('http://www.xxx.com/test/json')
if res.status_code == 200 and res.text != '':
print res.text
else:
print res.status_code
time.sleep(10)
get_info()
except Exception as e:
print e
def start():
threads = []
for i in range(40):
threads.append(threading.Thread(target=get_info,args=()))
for t in threads:
time.sleep(0.3)
t.start()
for t in threads:
t.join()
if __name__ == '__main__':
start()
代碼臨時寫,可能有小錯誤,大概就是這么個意思:
開啟40個線程,間隔0.3秒請求。剛開始很正常,但是2輪過后幾乎80% 90%的請求都報異常
HTTPConnectionPool(host='http://www.xxx.com/',port=80):Max retries exceeded with url: /test/json (Caused by(class 'socked.error'):[Errno 10060])
請問是哪里出了問題?
感謝你們的回答
抓的確實是小站。
我的想法是如果服務器臨時封禁的話,應該是報10054的錯誤。
可看起來又像是服務器封禁,前幾輪請求都是很正常的,為什么持續時間越長,拋出的異常就越多?
重試幾次的方法我做過,似乎不太起作用:def get_info(retries=3):
if 200:
...
else:
if retries > 0:
time.sleep(5)
get_info(retries-1)
初學Python,用來作爬蟲。實際上這個問題已經困擾我很久了。我想這個應該是在爬蟲項目中很常見的問題,請問該如何著手優化(少量異常可以接受)這個問題?解決方案1:
Python-Requests close http connection
最近我也碰到了這個問題,好像是http連接太多沒有關閉導致的,你可以看看這個帖子。
s = requests.session()
s.config['keep_alive'] = False
requests使用了urllib3庫,默認的http connection 是keep-alive的,requests中可以設置False關閉。解決方案2:
可能是訪問太頻繁,被封禁了?解決方案3:
因為你本地的端口不夠用了。解決方案4:
你訪問的是小站吧?我遇到過一個站,爬數據有時會出問題,不知道是服務器真力不從心還是被臨時封禁了。解決方案5:
應該是你的服務器與目標站之間的網絡連接出了問題,可以在訪問目標站時多重試幾次..
總結
以上是生活随笔為你收集整理的python捕捉线程错误_Pythonrequests多线程抓取出现HTTPConnectionPoolMaxretiresexceeded异常...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php mysql ajax 注册验证
- 下一篇: OSI网络七层模型简明教程