Pyhon : 爬虫Requests高级用法--超时(timeout)

本文详细介绍了在使用Python的Requests库时如何正确设置超时参数,包括连接超时和读取超时的区别,以及如何通过单一值或元组形式来指定超时时间,帮助开发者避免因服务器响应慢而导致的代码挂起问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

超时(timeout)

为防止服务器不能及时响应,大部分发至外部服务器的请求都应该带着 timeout 参数。在默认情况下,除非显式指定了 timeout 值,requests 是不会自动进行超时处理的。如果没有 timeout,你的代码可能会挂起若干分钟甚至更长时间。

连接超时指的是在你的客户端实现到远端机器端口的连接时(对应的是connect()_),Request 会等待的秒数。一个很好的实践方法是把连接超时设为比 3 的倍数略大的一个数值,因为 TCP 数据包重传窗口 (TCP packet retransmission window) 的默认大小是 3。

一旦你的客户端连接到了服务器并且发送了 HTTP 请求,读取超时指的就是客户端等待服务器发送请求的时间。(特定地,它指的是客户端要等待服务器发送字节之间的时间。在 99.9% 的情况下这指的是服务器发送第一个字节之前的时间)。

如果你制订了一个单一的值作为 timeout,如下所示:

r = requests.get(‘https://github.com’, timeout=5)

这一 timeout 值将会用作 connect 和 read 二者的 timeout。如果要分别制定,就传入一个元组:

r = requests.get(‘https://github.com’, timeout=(3.05, 27))

如果远端服务器很慢,你可以让 Request 永远等待,传入一个 None 作为 timeout 值,然后就冲咖啡去吧。

r = requests.get(‘https://github.com’, timeout=None)

### 解决 Python 中 `SyntaxError: EOF while scanning triple-quoted string literal` 错误 当遇到此错误时,意味着程序在扫描三重引号字符串字面量的过程中到达文件末尾 (EOF),但仍未能找到结束该字符串所需的闭合引号。这通常发生在未正确关闭多行字符串的情况下。 #### 原因分析 此类错误常见于以下几种情况: - 缺少匹配的闭合三重引号 (`'''` 或 `"""`) - 字符串跨越多个代码行但未适当处理换行或缩进[^1] #### 修正方法 为了修复这个问题,需确保每一对开启的三重引号都有相应的闭合三重引号存在,并且保持良好的编码习惯。下面给出几个具体的建议和实例来帮助理解如何避免这种错误的发生。 ##### 正确使用三重引号定义多行字符串 如果打算创建一个多行字符串,则应保证有完整的开闭三重引号对: ```python docstring_example = """这是一个文档字符串, 它可以跨多行书写。 注意这里的每一部分都应当被包含在一个成对的三重引号内""" ``` ##### 避免意外中断 有时可能会因为编辑器设置或其他原因导致输入过程中丢失了必要的闭合符号。因此,在编写涉及大量文本内容或多行注释的地方要格外小心。可以考虑分步构建复杂表达式或将大段文字先放在单独变量里再引用它们。 另外一种可能是由于异常退出IDE/编辑环境造成的源码损坏;此时应该检查是否有其他地方也出现了类似的不完整语句结构并予以纠正[^2]。 ##### 使用括号延续逻辑行 对于某些情况下希望将单个逻辑行拆分成物理上的多行显示以便阅读的情况,可以通过圆括号实现而无需依赖反斜杠转义字符(\): ```python long_string = ( "这是第一句话." "紧跟着第二句话," "最后是第三句话" ) print(long_string) ``` 通过这种方式既可提高代码清晰度又能防止潜在的语法问题发生。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值