Python requests请求超时的解决方案
作者:IT之一小佬
在进行网络数据爬取过程中,网络请求超时是一个令人头疼的问题,尤其在Python中,我们常常需要应对各种网络爬虫、API调用或其他网络操作,而网络请求超时的原因千奇百怪,在本篇文章中,我们将深入探讨Python requests请求超时的解决方案,需要的朋友可以参考下
python程序根据url从互联网上批量获取数据时,设置HTTP或Socket超时,来防止爬虫爬取某个页面时间过长,导致程序卡置不前。
1、socket
全局设置。
import socket socket.setdefaulttimeout(1)
t:代表经过t秒后,如果还未下载成功,自动跳入下一次操作,此次下载失败 。
2、添加timeout
使用timeout 参数可以设定等待连接的秒数,如果等待超时,Requests会抛出异常。
示例代码1:
import requests res = requests.get('https://github.com', timeout=0.01) print(res)
运行结果:
示例代码2:
import requests res = requests.get('https://github.com', timeout=10) print(res)
运行结果:
注意:timeout 仅对连接过程有效,与响应体的下载无关。 timeout 并不是整个下载响应的时间限制,而是如果服务器在 timeout 秒内没有应答,将会引发一个异常(更精确地说,是在 timeout 秒内没有从基础套接字上接收到任何字节的数据时)。
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'))
运行结果:
注意:max_retries 为最大重试次数,重试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)
运行结果:
示例代码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)
运行结果:
到此这篇关于Python requests请求超时的解决方案的文章就介绍到这了,更多相关Python requests请求超时内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!