任何长时间运行爬虫的人都会注意到:同样的任务,针对同样的网站,用同样的代码,在某些天失败得比其他天更多。周二没问题。周六更差。十一月的最后一周则完全是另一个世界。人们很容易把这称为噪音。但通常并非如此。
诚实的出发点是,没有任何公开数据集按星期几或节假日来衡量爬虫的封锁率。关于机器人封锁的最新大型研究,来自班贝格大学,发表于2026年,只是2026年初四天内的一次单次扫描,没有观察封锁如何随时间变化。真正存在的数据,是关于驱动封锁率的因素的大量信息:当人类流量变化时,机器人流量的占比如何变化;在高峰事件中防御措施会发生什么;以及负责调整这些防御措施的人何时停止调整。把这些拼在一起,就能解释爬虫运营者所看到的大部分现象。
关键要点
- 目前没有按星期或节假日发布的爬虫封锁率测量数据。任何引用此类数据的人都应被要求说明方法。
- 当人类流量下降时,机器人占比会上升。Cloudflare测得周末总流量下降约4%,但经过验证的机器人流量仅下降约1%。
- 购物高峰事件会带来更多机器人和更严格的防御。Imperva测得恶意机器人在节假日购物季零售流量中占26.3%,而全年平均值为22.7%。
- 最糟糕的机器人日不一定是那个最有名的日子。Queue-it的零售样本显示,2024年12月11日非人类流量达到访问量的83%,而不是黑色星期五。
- 变更冻结是围绕高峰季节和年末的既定做法,因此防御措施通常在期间之前和之后变化,而不是在期间之中。
为什么日历会影响封锁率
在大多数现代系统中,网站决定是否质询或封锁某个请求时,是根据当前流量做出判断的。日历上有三件事会改变这种判断:
- 流量构成。 当人类离开时,留下的自动化流量在总量中的占比就更大,而占比往往正是让防御者和模型感到警觉的因素。
- 风险高低。 在促销日或抢票日,网站更关心黄牛、撞库和囤货行为,因此愿意容忍更多摩擦来阻止它们。
- 人的因素。 规则是由团队编写和调整的,而这些团队会在最关键的时刻休假并冻结变更。
每一点都有证据支持。
周末:人类离开,机器人大多不离开
人类互联网流量有明显的每周节律。英国国家统计局数据科学园对伦敦互联网交换中心流量的分析发现,“周末往往流量较低,而周中几天流量最高”,银行假日前后的流量平均低约7.8%,圣诞节期间流量更低。
自动化流量则更为平稳。Cloudflare对2020年1月至7月的分析发现,虽然典型工作日流量略高于平均值,但周末显示”总流量下降约4%“,而这种模式”并不完全适用于经过验证的机器人,它们仅出现约1%的小幅下降”。同一分析还发现,人类流量在协调世界时00:00至05:00之间约低15%,在14:00至17:00之间最高可高出25%。
如果一个网站的自动化流量保持稳定,而人类流量下降,那么自动化流量的占比就会上升,任何一个自动化请求看起来异常的概率也随之增加。这是周末和夜间封锁率变差背后最合理的机制,也是为什么持续、无固定时间表的爬取在周日比在周二更容易引人注目。
有一个重要的反例。Integral Ad Science在391天内测量广告展示中的机器人流量,发现其追踪的机器人呈现相反的模式:工作日机器人流量比周末高约21.2%,而人类流量仅高6.9%。并非所有自动化都是平稳的。模仿人类作息的欺诈操作,其行为方式与爬虫不同,而网站的防御系统会同时看到所有这些流量。你自己的封锁率是否存在每周效应,是一个针对每个目标的实证问题。
高峰事件:更多机器人,更多摩擦
购物日历将问题的两端都集中在一起。
| 发现 | 来源 |
|---|---|
| 2023年恶意机器人在节假日购物季零售流量中占26.3%,而全年平均值为22.7%;黑色星期五的账户盗用攻击上升85% | Imperva,2023年11月 |
| 2024年黑色星期五,机器人流量在电商流量中最高占19%,人类占81%;机器人占登录尝试的63%,较一个月前略有下降,原因是人类登录增加 | Cloudflare,2024年12月 |
| 在2025年”网络五日”期间,28%的请求来自机器人或数据中心,低于2024年的36%;97%被展示质询的可疑访客未能通过质询 | Queue-it,138家零售商,2025年12月 |
| 在2024年购物季,46%的访问被标记为机器人或数据中心流量;最糟糕的一天是12月11日,达到83% | Queue-it,2024年12月 |
| 2025年样本中的零售商部署了787个候客室,整个季节激活超过2000次 | Queue-it,2025年12月 |
有两个细节值得指出。首先,Cloudflare的数据显示,在最大的高峰日,人类流量的增长实际上可能稀释机器人占比,因为人类到访的数量要多得多。高峰日不一定是你的自动化流量占比看起来最糟糕的一天。其次,Queue-it的数据显示,非人类流量最糟糕的一天出现在12月中旬,而不是黑色星期五。为某个已知事件收紧防御的网站,可能会将这种收紧状态维持数周之久。
实际的结论是,任何针对零售、票务或旅游行业的爬虫,都应该预计从11月中旬到12月,无论其自身行为如何,都会遇到更多质询、更多候客室以及更低的容忍度。
节假日:更安静,有时也更平和
节假日的影响是双向的。人类流量下降:Cloudflare测得2023年感恩节美国流量比前一周低约10%。看起来,某些攻击流量也是如此。同一分析发现,感恩节当月”被归类为针对美国的DDoS攻击的流量占比最低”。
对爬虫来说,目标所在国家的公共假日结合了两方面:人类流量降低会推高自动化流量占比,而防御方的人手也更少。对你封锁率的净影响取决于具体目标。可以确定的是,节假日是具有地域性的。一个国家的周二,在另一个国家可能是节假日,这也是为什么应该按目标、按市场分别测量,而不是采用全局数据的又一个理由。
变更冻结:防御措施何时停止变化
规则的变化由人来决定,而人会在可预测的时刻冻结变更。这是有据可查的做法,而不是传闻。
- Shopify工程团队描述了一个功能冻结,“在BFCM前几周开始”,以及在活动前几天和期间的代码冻结,“此时只能部署关键修复”。
- GitLab将生产变更锁定定义为”在团队可用性降低的时期(例如重大节假日)对所有生产变更的完全暂停”。
- Cloudflare的WAF托管规则遵循”七天发布周期,通常在周一或周二(根据公共假日调整)”。
冻结机制使得高峰季节一旦开始就显得异常稳定:防御措施在此前数周被收紧,然后基本保持不变。这也使得一月成为变化频发的季节。假期期间被推迟的规则会在团队返岗后上线,这时一个整个十二月都运行正常的爬虫,可能在自身没有任何变化的情况下突然失效。
测量你自己的日历
由于没有公开数据集能针对你的目标回答这个问题,唯一可靠的答案来自你自己的日志。方法很简单:按目标、按星期几和小时(使用目标所在地的当地时区)计算封锁率,并将每个时段与该目标的整体封锁率进行比较。
from collections import defaultdict
from datetime import datetime
def block_rate_by_slot(rows, tz=None, min_requests=50):
"""rows: (target, iso_timestamp, blocked). Block rate per target, weekday and hour."""
counts = defaultdict(lambda: [0, 0])
for target, ts, blocked in rows:
t = datetime.fromisoformat(ts)
if tz is not None:
t = t.astimezone(tz)
slot = (target, t.strftime("%a"), t.hour)
counts[slot][0] += 1
counts[slot][1] += int(blocked)
return {
slot: round(b / n, 3)
for slot, (n, b) in counts.items()
if n >= min_requests
}
将软封锁也计入封锁,而不仅仅是错误代码,因为以成功状态码提供的质询页面仍然是一种拒绝;静默失败率介绍了如何检测这类情况。在得出结论之前,至少保留几周的历史数据,并标记已知事件和当地节假日,以免一次糟糕的黑色星期五成为你对所有星期五的模型。
据此安排调度
一旦你了解了目标的日历规律,一些调整就会自然而然地出现。
- 按星期几设定基准,而不是按天。 一个将周六与工作日平均值进行比较的健康评分,每个周末都会发出错误警报。应该进行同类比较,详见构建目标健康评分。
- 将灵活的工作调度到合适的时段。 不需要在特定日期运行的刷新任务,可以转移到目标容忍度最高的时段和日期。成本感知的爬取调度已经按成本权衡每次访问;更高的预期封锁率意味着更高的成本。
- 在目标的高峰期放缓节奏。 在最大促销日,零售商正在承受真实负载下保护真实客户。在已知事件期间降低并发数、拉长间隔,既是礼貌之举,也是明智之举,背压机制应该在封锁率上升时自动完成这一调整。
- 留意一月份。 预计防御措施会随着冻结解除而变化,并保持金丝雀监测运行,以便在数小时而非数周内察觉变化。
- 从市场自身的时区和视角采集数据。 节假日和每日节律都是地域性的,网站提供的内容也是如此。使用针对特定国家的住宅出口节点,例如Shifter网关上的
country-de,可以让爬虫像德国当地访客在德国节假日那样看到德国网站。
结论
封锁率随日历变化是有可以理解的原因的:自动化流量比人类流量更平稳,因此当人们下线时,其占比会上升;高峰事件会在其前后数周内带来更多机器人和更严格的防御;而负责这些防御的团队会在最繁忙的时期冻结变更,并在之后恢复调整。这些现象都没有在任何公开数据集中针对爬虫直接测量过,而且证据并不一致:某些机器人流量会紧密遵循人类作息。
这意味着日历问题需要每个团队根据自己的数据来回答。按目标、星期几和小时拆解你的封锁率,标记节假日和促销事件,并据此调度。你所发现的模式将是针对你自身目标的特定规律,远比任何全局平均值更有用。
来源与参考文献
- Gundelach、Mühlhauser 和 Herrmann,Detecting Bot Detection,arXiv,2026年6月12日。扫描时间为2026年2月27日至3月2日。
- Cloudflare,Bot Attack trends for Jan-Jul 2020,2020年10月20日。
- Phil Stubbings,ONS Data Science Campus,Detecting collective human behaviour in internet traffic volume data,2019年7月18日。
- Integral Ad Science,How Does Bot Traffic Vary Over Time?,2023年12月18日。
- Imperva,Five Observations from 2023 Black Friday and Cyber Monday,2023年11月。
- Adam Martinetti,Cloudflare,Grinch Bots strike again,2024年12月23日。
- Queue-it,2025 Holiday Shopping Stats,2025年12月24日,以及2024 Holiday Shopping Stats,2024年12月24日。
- João Tomé,Cloudflare,Do hackers eat turkey?,2023年11月24日。
- Camilo Lopez,Shopify Engineering,Preparing Shopify for Black Friday and Cyber Monday,2018年12月21日。
- GitLab,Dedicated maintenance。生产变更锁定。
- Cloudflare,WAF changelog。托管规则发布周期。