Python requests請求超時(shí)的解決方案
python程序根據(jù)url從互聯(lián)網(wǎng)上批量獲取數(shù)據(jù)時(shí),設(shè)置HTTP或Socket超時(shí),來防止爬蟲爬取某個(gè)頁面時(shí)間過長,導(dǎo)致程序卡置不前。
1、socket
全局設(shè)置。
import socket socket.setdefaulttimeout(1)
t:代表經(jīng)過t秒后,如果還未下載成功,自動(dòng)跳入下一次操作,此次下載失敗 。
2、添加timeout
使用timeout 參數(shù)可以設(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 并不是整個(gè)下載響應(yīng)的時(shí)間限制,而是如果服務(wù)器在 timeout 秒內(nèi)沒有應(yīng)答,將會引發(fā)一個(gè)異常(更精確地說,是在 timeout 秒內(nèi)沒有從基礎(chǔ)套接字上接收到任何字節(jié)的數(shù)據(jù)時(shí))。
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)行耗時(shí)至少是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é)果:
到此這篇關(guān)于Python requests請求超時(shí)的解決方案的文章就介紹到這了,更多相關(guān)Python requests請求超時(shí)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中關(guān)于浮點(diǎn)數(shù)的冷知識
這篇文章主要給大家介紹了Python中關(guān)于浮點(diǎn)數(shù)的冷知識,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09對Python Class之間函數(shù)的調(diào)用關(guān)系詳解
今天小編就為大家分享一篇對Python Class之間函數(shù)的調(diào)用關(guān)系詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01Python 讀取xml數(shù)據(jù),cv2裁剪圖片實(shí)例
這篇文章主要介紹了Python 讀取xml數(shù)據(jù),cv2裁剪圖片實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03一篇文章從零開始創(chuàng)建conda環(huán)境、常用命令的使用及pycharm配置項(xiàng)目環(huán)境
在Conda中創(chuàng)建新環(huán)境是一個(gè)非常有用的做法,尤其是當(dāng)你需要為不同的項(xiàng)目安裝不同版本的軟件包時(shí),這篇文章主要給大家介紹了關(guān)于從零開始創(chuàng)建conda環(huán)境、常用命令的使用及pycharm配置項(xiàng)目環(huán)境的相關(guān)資料,需要的朋友可以參考下2024-07-07Python實(shí)現(xiàn)調(diào)度算法代碼詳解
這篇文章主要介紹了Python實(shí)現(xiàn)調(diào)度場算法代碼詳解,具有一定參考價(jià)值,需要的朋友可以了解下。2017-12-12