Python-requests请求的超时时间
生活随笔
收集整理的這篇文章主要介紹了
Python-requests请求的超时时间
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
python程序根據url從互聯網上批量下載圖片時,設置HTTP或Socket超時,來防止爬蟲爬取某個頁面時間過長,導致程序卡置不前。
一種解決方案是全局設置:
import socket socket.setdefaulttimeout(t)t:代表經過t秒后,如果還未下載成功,自動跳入下一次操作,此次下載失敗
另外一種解決方案是:
使用timeout 參數可以設定等待連接的秒數,如果等待超時,Requests會拋出異常
>>> requests.get('http://github.com', timeout=0.001) Traceback (most recent call last):File "<stdin>", line 1, in <module> requests.exceptions.Timeout: HTTPConnectionPool(host='github.com', port=80): Request timed out. (timeout=0.001) >>> requests.get('https://www.baidu.com',timeout=0.5) <Response [200]>timeout 僅對連接過程有效,與響應體的下載無關。 timeout 并不是整個下載響應的時間限制,而是如果服務器在 timeout 秒內沒有應答,將會引發一個異常(更精確地說,是在 timeout 秒內沒有從基礎套接字上接收到任何字節的數據時)。
第三種
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' import time import requests from requests.adapters import HTTPAdapters = 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:r = s.get('http://www.google.com.hk', timeout=5)return r.text except requests.exceptions.RequestException as e:print(e) print(time.strftime('%Y-%m-%d %H:%M:%S'))max_retries 為最大重試次數,重試3次,加上最初的一次請求,一共是4次,所以上述代碼運行耗時是20秒而不是15秒
第四種:捕獲請求異常:
def gethtml(url):i = 0while i < 3:try:html = requests.get(url, timeout=5).textreturn htmlexcept requests.exceptions.RequestException:i += 1總結
以上是生活随笔為你收集整理的Python-requests请求的超时时间的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python函数默认参数作用域
- 下一篇: 写 Python 时的 5 个坏习惯