本文目录导读:

这是一个非常务实的问题,抓取频次(Crawl Frequency/Delay)的设置没有“万能公式”,它取决于你的爬虫身份、目标服务器的承受能力以及对数据时效性的要求。
设置的核心原则是:在不让对方服务器过载的前提下,尽可能快地获取数据。
以下是几个关键维度的设置建议和实操方法:
核心判断依据:你是在“做客”还是在“攻城”
-
尊重
robots.txt:- 这是第一道红线,检查目标网站的
www.example.com/robots.txt,看是否有Crawl-delay: 10这样的指令。 - 建议: 严格执行
Crawl-delay的值,或者将其设为该值,如果对方写了10秒,你设1秒就是“攻城”行为。
- 这是第一道红线,检查目标网站的
-
区分你的目的:
- 高时效性(如电商价格、新闻快讯): 频率需要高,但必须用“巧劲”(见下方技巧)。
- 批量爬取(如历史文章、数据归档): 频率应该低很多,稳扎稳打。
- 特殊场景(秒杀、抢票): 此场景已属于“短时高频对抗”,不在常规讨论范围内,风险极高。
具体频次量化建议(针对普通网站)
这是从慢到快的设置参考(假设单IP):
| 场景 | 推荐延迟(秒/请求) | 适用于 |
|---|---|---|
| 极度保守 | 10-30秒 | 小型、老旧或免费的网站;首次爬取不了解对方时;仅需少量数据 |
| 谨慎 | 5-10秒 | 中型网站、博客、内容站点;对方有明确反爬策略 |
| 常规 | 2-5秒 | 大型站点(如维基百科)、对反爬不太敏感的网站 |
| 快速 | 5-2秒 | 大型电商(如亚马逊、京东)、知名API、高并发CDN后的网站(需配合代理) |
| 激进 | 1-0.5秒 | 风险极高! 仅在有优质代理池且目标网站抗压能力强时使用 |
核心公式(经验值):
平均延迟 = (单次请求响应时间 + 单次页面解析时间) × 防抖系数 (1.5 ~ 3倍)
进阶技巧:如何设置“智能”频次
单纯固定延迟是不够的,你需要自适应设置:
监控响应状态码(动态调整)
设置一个“惩罚机制”和“奖励机制”:
- 收到 200 成功: 保持或稍微加快速度(如减少0.5秒)。
- 收到 429(Too Many Requests)或 503: 立即停止,并将延迟加倍。
- 收到 403: 停止,检查IP或Headers是否被封。
基于请求耗时的自适应
- 如果最近10个请求的平均耗时是2秒,说明服务器负载正常,你可以将延迟设为 2-4秒。
- 如果平均耗时突然飙升到10秒,说明服务器响应慢或者正在限流,你应当将延迟增加到 10-15秒。
并发与频次的分离
- 错误做法: 开100个线程,每个线程间隔0.1秒请求。
- 正确做法: 控制总请求速率,使用10个线程,每个线程间隔2秒,总速率为约5请求/秒,这比“1个线程间隔0.1秒”更高效且更“温和”。
时间窗口——随机化
绝对不要机械地“每3秒请求一次”,这很容易被模式识别封禁。
- 随机化: 每次请求的延迟在
[2秒, 6秒]区间内随机浮动。 - 示例(Python):
import time import random time.sleep(random.uniform(1, 3)) # 等待1到3秒之间的随机时间
实战场景推荐配置
| 目标类型 | 推荐配置 |
|---|---|
| 电商大站(如淘宝、JD) | 单IP:5-10秒;多IP:每个IP 3-5秒;配合高质量代理;避开高峰期 |
| 新闻/博客网站 | 单IP:2-5秒;可适当提高并发(5-10线程) |
| 政府/公益网站 | 极度保守:10-15秒;很多小站点运维能力差,容易被打死 |
| API接口 | 严格遵循API文档的速率限制(Rate Limit) |
| 搜索引擎(如Google/Bing) | 他们有专门的爬虫控制台,建议使用官方工具 |
必须避开的三大“作死”行为
- 无延迟的批量请求: 比如一秒内发起100次请求。
- 爬取主站资源: 不要爬取
.css,.js,.jpg等静态资源,除非必要。 - 并发数过高: 对于99%的网站,超过50个并发线程都是危险的。
最合理的设置流程
- 试探阶段: 先以一个很慢的速度(如5秒/次)抓取前100个页面。
- 观察阶段: 检查是否有429/503错误,查看服务器响应时间。
- 加速阶段: 如果没有错误,逐步提高速度(如每次减少0.5秒),直至出现少量429错误。
- 稳定阶段: 将速率回调到出现错误前的水平,并加上随机抖动。
- 长期维护: 定期检查
robots.txt和目标网站的稳定性变化。
一句话建议: 宁可慢10分钟,不要封1小时,频次设置的核心是“可持续性”,而不是“瞬时速度”。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。