在使用 Python 爬虫时,添加超时至关重要,以避免脚本无限期等待响应。以下是最佳实践:使用 Requests 库设置超时(10 秒);使用 socket 库设置超时(10 秒);设置全局超时(10 秒);使用 Requests 库的重试机制(3 次重试,每次间隔 1 秒);处理 Requests 库抛出的超时异常(ConnectTimeout 或 ReadTimeout)。
Python爬虫添加超时的最佳实践
在使用Python爬虫时,添加超时至关重要,以避免脚本无限期地等待响应,从而导致网络阻塞。下面是如何在Python爬虫中添加超时的最佳实践:
1. 使用Requests库设置超时
Requests库是
python
中流行的HTTP请求库,提供了设置超时的简单方法。具体语法如下:
立即学习
“
Python免费学习笔记(深入)
”;
2. 使用socket库设置超时
如果你没有使用Requests库,也可以使用Python的socket库设置超时。这需要直接使用套接字来处理HTTP请求。
Python 3.14.3
微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。
下载
3. 设置全局超时
对于频繁发送请求的爬虫,设置全局超时可以简化超时处理。可以使用以下代码设置Requests库的全局超时:
4. 使用Retry机制
Requests库提供了重试机制,可以在连接失败时自动重试请求。这与超时机制配合使用,可以进一步提高爬虫的稳定性。
5. 异常处理
在添加超时后,还需要对可能抛出的
超时异常
进行处理。Requests库将超时异常抛出为
或
。
import requests
# 设置 10 秒超时
response = requests.get('https://www.example.com', timeout=10)import socket
# 创建套接字并设置 10 秒超时
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(10)
# 与服务器建立连接
sock.connect(('www.example.com', 80))
# 发送请求并读取响应
sock.send('GET / HTTP/1.1\r\n'.encode())
response = sock.recv(4096)import requests
# 设置 10 秒全局超时
requests.adapters.DEFAULT_RETRIES = 10import requests
# 创建带有重试机制的会话
session = requests.Session()
# 设置 3 次重试,每次重试间隔 1 秒
session.mount('https://', requests.adapters.HTTPAdapter(max_retries=3, retry_delay=1))
# 发送请求
response = session.get('https://www.example.com')requests.exceptions.ConnectTimeoutrequests.exceptions.ReadTimeouttry:
response = requests.get('https://www.example.com', timeout=10)
except (requests.exceptions.ConnectTimeout, requests.exceptions.ReadTimeout) as e:
# 处理超时异常
print(f'请求超时:{e}')