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