????????python程序根據(jù)url從互聯(lián)網(wǎng)上批量獲取數(shù)據(jù)時,設(shè)置HTTP或Socket超時,來防止爬蟲爬取某個頁面時間過長,導(dǎo)致程序卡置不前。
1、socket
全局設(shè)置。
import socket
socket.setdefaulttimeout(1)
t:代表經(jīng)過t秒后,如果還未下載成功,自動跳入下一次操作,此次下載失敗 。
2、添加timeout
使用timeout 參數(shù)可以設(shè)定等待連接的秒數(shù),如果等待超時,Requests會拋出異常。
示例代碼1:
import requests
res = requests.get('https://github.com', timeout=0.01)
print(res)
運(yùn)行結(jié)果:
示例代碼2:
import requests
res = requests.get('https://github.com', timeout=10)
print(res)
運(yùn)行結(jié)果:?
注意:timeout 僅對連接過程有效,與響應(yīng)體的下載無關(guān)。 timeout 并不是整個下載響應(yīng)的時間限制,而是如果服務(wù)器在 timeout 秒內(nèi)沒有應(yīng)答,將會引發(fā)一個異常(更精確地說,是在 timeout 秒內(nèi)沒有從基礎(chǔ)套接字上接收到任何字節(jié)的數(shù)據(jù)時)。
3、HTTPAdapter(max_retries=3)重試
示例代碼:
import time
import requests
from requests.adapters import HTTPAdapter
s = requests.Session()
s.mount('http://', HTTPAdapter(max_retries=3))
s.mount('https://', HTTPAdapter(max_retries=3))
print(time.strftime('%Y-%m-%d %H:%M:%S'))
try:
res = s.get('https://github.com', timeout=2)
print(res)
except requests.exceptions.RequestException as e:
print(e)
print(time.strftime('%Y-%m-%d %H:%M:%S'))
運(yùn)行結(jié)果:
注意:max_retries 為最大重試次數(shù),重試3次,加上最初的一次請求,一共是4次,所以上述代碼運(yùn)行耗時至少是8秒而不是6秒。
4、捕捉異常
示例代碼1:
import requests
def get_html(url, timeout=5):
i = 0
while i < 3:
try:
html = requests.get(url, timeout=timeout)
return html.text
except requests.exceptions.RequestException as e:
i += 1
print(e)
res = get_html('https://github.com', timeout=0.1)
print(res)
運(yùn)行結(jié)果:
示例代碼2:? 【試圖提大timeout的值】
import requests
def get_html(url, timeout=5):
i = 0
while i < 3:
try:
html = requests.get(url, timeout=timeout)
return html.text
except requests.exceptions.RequestException as e:
i += 1
print(e)
res = get_html('https://github.com', timeout=10)
print(res)
運(yùn)行結(jié)果:文章來源:http://www.zghlxwxcb.cn/news/detail-573106.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-573106.html
到了這里,關(guān)于python-requests請求超時解決方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!