在 Day 10 中,我们已经明确了一件事:
大多数爬虫被封,并不是代码写错,而是"访问行为不正常"。
其中,最容易、也最先触发反爬的因素,就是请求频率。
很多新手会有这样的疑问:
-
我已经加了 Headers,为什么还是被封?
-
我没有并发,为什么还是 429?
-
我只是多跑了一会儿,IP 就不行了?
答案很简单:
你访问得太"规律"、太"快"、太"像脚本"。
今天,我们就系统讲清楚:
什么是合理的请求频率?爬虫应该如何"慢下来"?
🔍 一、什么叫"请求频率"?
请求频率,指的是:
-
单位时间内
-
同一个 IP
-
向同一个网站
-
发起请求的次数
例如:
-
1 秒 10 次
-
1 分钟 300 次
-
连续访问 1000 个页面
这些都会被服务器记录并分析。
🧠 二、服务器是如何判断"你太快了"的?
服务器并不是只看"秒级请求数",而是 综合判断。
常见判断维度包括:
✅ 1. 单位时间内的请求数
例如:
1 秒内请求 20 次(非常异常)
✅ 2. 请求间隔是否固定
例如:
1.000s 1.000s 1.000s
这比"快"更危险 ------
因为它暴露了你是程序。
✅ 3. 连续访问深度
短时间内访问:
-
第 1 页
-
第 2 页
-
...
-
第 100 页
真实用户几乎不会这样操作。
✅ 4. 是否存在"停顿行为"
真人会:
-
停下来读内容
-
翻页后停几秒
-
有长有短
爬虫往往没有。
🚨 三、新手最常见的"频率错误写法"
如果你写过下面这种代码,被封是必然的。
❌ 错误 1:无延迟循环请求
python
for url in urls:
requests.get(url)
👉 等于告诉服务器:
"我是机器人。"
❌ 错误 2:固定 sleep 时间
python
time.sleep(1)
虽然比不 sleep 好,但仍然非常规律。
❌ 错误 3:分页一口气拉到底
python
for page in range(1, 1000):
fetch(page)
真实用户极少这样操作。
🧭 四、什么是"合理"的爬虫访问节奏?
我们先说结论,再解释原因。
📌 一个相对安全的新手参考节奏:
-
每次请求间隔:1.5 ~ 4 秒(随机)
-
连续请求数量:20 ~ 50 次以内
-
每抓一段时间,主动暂停
-
避免精确、固定时间间隔
📌 注意:
这不是绝对值,而是"像真人"的思路。
🛠 五、正确的请求频率控制方式(实战)
下面给你 4 种 强烈推荐 的做法。
✅ 方式 1:随机延迟(必须掌握)
python
import time
import random
time.sleep(random.uniform(1.5, 4.0))
这是最基础、也是最有效的方式。
✅ 方式 2:分段休眠(模拟真人行为)
python
for i, url in enumerate(urls):
fetch(url)
time.sleep(random.uniform(1.5, 4))
if i % 20 == 0:
time.sleep(random.uniform(10, 30))
这非常像真人:
-
连续看几页
-
停下来休息
-
再继续
✅ 方式 3:不同页面,不同节奏
例如:
-
列表页:慢
-
详情页:更慢
-
翻页操作:更谨慎
python
# 列表页
time.sleep(random.uniform(2, 4))
# 详情页
time.sleep(random.uniform(3, 6))
✅ 方式 4:异常后主动降速(很重要)
如果出现:
-
状态码 429
-
请求超时
-
返回内容异常
不要重试过快,而是:
python
time.sleep(random.uniform(30, 60))
这是 "保命操作"。
🧩 六、请求频率 ≠ 并发数(新手常混淆)
很多人以为:
"我不开多线程就安全了。"
这是误解。
即使是 单线程,如果你:
-
请求过快
-
间隔固定
-
行为异常
照样会被封。
并发 ≠ 频率控制
频率控制,是行为层面的优化。
🧠 七、如何判断你现在的频率是否安全?
你可以自查 5 个问题:
-
我的请求间隔是不是固定的?
-
我是否一口气爬了很多页?
-
我有没有模拟"停顿"?
-
被封前是否有 429/超时?
-
浏览器手动操作时,会不会这么快?
如果有 2 条以上回答 "是",
那你的频率一定需要调整。
📌 八、Day 11 的核心认知(非常重要)
请记住这句话:
反爬的第一步,不是更复杂的技术,而是"放慢速度"。
绝大多数网站,在你访问足够"像人"的情况下,
甚至不会启动更高级的反爬策略。
✅ 总结
今天你真正掌握了:
✔ 什么是请求频率
✔ 服务器如何判断你"太快"
✔ 新手最容易犯的频率错误
✔ 如何用随机延迟模拟真人
✔ 如何分段抓取、主动停顿
✔ 如何在异常后保护 IP
✔ 请求频率与反爬的真实关系
从 Day 11 开始,你的爬虫已经不再是"暴力脚本",
而是开始具备 行为层面的优化意识。
如果你在项目中遇到:
-
不知道该 sleep 多久
-
明明很慢还是被封
-
不同页面频率如何区分
-
想判断是频率问题还是其他反爬
-
希望整体优化爬虫访问策略