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 秒內沒有從基礎套接字上接收到任何字節的數據時)。

第三種

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 :
   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 = 0
   while i < 3 :
     try :
       html = requests.get(url, timeout = 5 ).text
       return html
     except requests.exceptions.RequestException:
       i + = 1

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM