Python requests请求超时的解决方案

 更新时间:2024年12月17日 09:38:03   作者: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请求超时内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python 密码验证(滑块验证)

    python 密码验证(滑块验证)

    滑块密码在很多登录界面都可以看到,本文主要介绍了python 密码验证(滑块验证),文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Python中关于浮点数的冷知识

    Python中关于浮点数的冷知识

    这篇文章主要给大家介绍了Python中关于浮点数的冷知识,文中通过示例代码介绍的非常详细,对大家学习或者使用Python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • 对Python Class之间函数的调用关系详解

    对Python Class之间函数的调用关系详解

    今天小编就为大家分享一篇对Python Class之间函数的调用关系详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • 如何用Python绘制棒棒糖图表

    如何用Python绘制棒棒糖图表

    这篇文章主要介绍了如何用Python绘制棒棒糖图表,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-05-05
  • Python常见的错误以及其解决方案

    Python常见的错误以及其解决方案

    这篇文章主要给大家介绍了关于Python常见的错误以及其解决方案的相关资料,学习python任重而道远,对于初学者来说,最难受的就是报错,本文总结了一些常见错误,需要的朋友可以参考下
    2023-08-08
  • 详解python中递归函数

    详解python中递归函数

    这篇文章主要介绍了python递归函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Python 读取xml数据,cv2裁剪图片实例

    Python 读取xml数据,cv2裁剪图片实例

    这篇文章主要介绍了Python 读取xml数据,cv2裁剪图片实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • 一篇文章从零开始创建conda环境、常用命令的使用及pycharm配置项目环境

    一篇文章从零开始创建conda环境、常用命令的使用及pycharm配置项目环境

    在Conda中创建新环境是一个非常有用的做法,尤其是当你需要为不同的项目安装不同版本的软件包时,这篇文章主要给大家介绍了关于从零开始创建conda环境、常用命令的使用及pycharm配置项目环境的相关资料,需要的朋友可以参考下
    2024-07-07
  • Python实现调度算法代码详解

    Python实现调度算法代码详解

    这篇文章主要介绍了Python实现调度场算法代码详解,具有一定参考价值,需要的朋友可以了解下。
    2017-12-12
  • python列表与列表算法详解

    python列表与列表算法详解

    这篇文章主要介绍了Python的列表和列表算法,具有一定参考价值,需要的朋友可以了解下,希望能给你带来帮助
    2021-08-08

最新评论