爬虫请求超时

f1 = open('wen.txt','r')
print(f1.read(3))
# 文件指针用于表明文件读取的其实位置, 文件指针表明了文件将要从那个位置开始读写

#tell() 函数 返回文件指针的位置
print(f1.tell())
'''
    seek() 函数用于将文件的指针移动到指定的位置
'''
'''
    split() 函数 
'''
str1 = open('wen.txt')
print(str1.read())
str1.seek(0)
print(str1.tell())
str2 = "hell boy<[www.bai.=du.com]byebye>"
print(str2.split('[')[1].split([']'][0]))

f2 = open('wenjian1.txt')
with open('wenjian1.txt','r',encoding='utf-8') as f:
    m = f.readlines()
    for i in m:
        print(i)

请求超时

import requests
# 循环发送请求50次
for a in range(50):
    try:
        response = requests.get('https://www.baidu.com/', timeout=0.1)
        print(response.status_code)
    except Exception as e:

        print('异常'+str(e))

import requests
# 导入request.exceptions 模块类的3种异类
from requests.exceptions import ReadTimeout,HTTPError,RequestException
# 循环发送请求50次
for a in range(50):
    try:
        response = requests.get('https://www.baidu.com/', timeout=0.1)
        print(response.status_code)
    except ReadTimeout:
        print('timeout, 请求超时')
    except HTTPError:
        print('httperror, HTTP异常')
    except RequestException:
        print('reqerror, 请求异常')


### 解决 Python 爬虫请求超时问题的方法 当使用 `requests` 库进行 HTTP 请求时,可能会遇到网络延迟或其他原因导致的请求超时。为了有效应对这一情况并提高爬虫程序的稳定性,可以采取多种策略。 #### 设置合理的超时时间 通过设置合适的超时参数来控制等待服务器响应的时间长度是一个基本措施。如果未指定,则默认会一直等待直到连接建立成功或失败为止。可以通过向 `get()` 或者其他发送函数传递一个名为 `timeout` 的浮点数作为秒单位的最大允许等待时间[^4]: ```python import requests try: response = requests.get('https://example.com', timeout=5.0) except requests.Timeout as e: print(f'Timeout error occurred: {e}') ``` #### 使用重试机制 对于偶尔发生的短暂性错误(如临时性的网络波动),可以在捕获异常之后尝试重新发起相同的请求几次。这里展示了一个简单的例子,它会在发生超时时自动重复最多三次尝试[^1]: ```python from urllib3.util.retry import Retry from requests.adapters import HTTPAdapter import requests session = requests.Session() retries = Retry(total=3, backoff_factor=0.1, status_forcelist=[ 500, 502, 503, 504 ]) adapter = HTTPAdapter(max_retries=retries) session.mount('http://', adapter) session.mount('https://', adapter) try: resp = session.get(url='https://api.github.com') except Exception as err: print(err) else: print(resp.status_code) ``` #### 处理不同类型的超时异常 除了普通的 `Timeout` 错误外,还有可能遭遇读取数据过程中断开等情况下的特定异常类——比如 `ReadTimeout` 和 `ConnectTimeout` 。针对这些特殊情况也可以分别定义不同的处理逻辑[^3] : ```python from requests.exceptions import ConnectTimeout, ReadTimeout try: r = requests.post("http://someurl", data=payload, timeout=(connect_timeout, read_timeout)) except ConnectTimeout: # Handle connect timeout... except ReadTimeout: # Handle read timeout... ``` #### 调整并发度与频率限制 过高的并发量可能导致目标网站拒绝服务甚至封禁 IP 地址;而过于频繁地访问同样会引起对方反感从而触发防护机制。因此,在编写多线程或多进程版本的爬虫之前应当充分考虑这一点,并适当降低每次抓取之间的间隔时间以及总的请求数目[^2].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱喝水的小鲨鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值