Python-requests请求的超时时间
python程序根據(jù)url從互聯(lián)網(wǎng)上批量下載圖片時(shí),設(shè)置HTTP或Socket超時(shí),來(lái)防止爬蟲(chóng)爬取某個(gè)頁(yè)面時(shí)間過(guò)長(zhǎng),導(dǎo)致程序卡置不前。
一種解決方案是全局設(shè)置:
import socket socket.setdefaulttimeout(t)t:代表經(jīng)過(guò)t秒后,如果還未下載成功,自動(dòng)跳入下一次操作,此次下載失敗
另外一種解決方案是:
使用timeout 參數(shù)可以設(shè)定等待連接的秒數(shù),如果等待超時(shí),Requests會(huì)拋出異常
>>> 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 僅對(duì)連接過(guò)程有效,與響應(yīng)體的下載無(wú)關(guān)。 timeout 并不是整個(gè)下載響應(yīng)的時(shí)間限制,而是如果服務(wù)器在 timeout 秒內(nèi)沒(méi)有應(yīng)答,將會(huì)引發(fā)一個(gè)異常(更精確地說(shuō),是在 timeout 秒內(nèi)沒(méi)有從基礎(chǔ)套接字上接收到任何字節(jié)的數(shù)據(jù)時(shí))。
第三種
''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! ''' 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 為最大重試次數(shù),重試3次,加上最初的一次請(qǐng)求,一共是4次,所以上述代碼運(yùn)行耗時(shí)是20秒而不是15秒
第四種:捕獲請(qǐng)求異常:
def gethtml(url):i = 0while i < 3:try:html = requests.get(url, timeout=5).textreturn htmlexcept requests.exceptions.RequestException:i += 1總結(jié)
以上是生活随笔為你收集整理的Python-requests请求的超时时间的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python函数默认参数作用域
- 下一篇: 写 Python 时的 5 个坏习惯