先停止继续发起请求,把已经拿到的数据落盘并标记来源与时间,再判断限流是暂时性的还是当前调用方式已经不可持续。保护已有结果的重点不是继续硬撑,而是让已拿到的部分保持可用、可续跑、可核对。
限流通常有两类可区分的原因。一类是短时频率触发,等待后恢复;另一类是身份、配额或调用方式已经触顶,继续重试只会重复失败。判断依据可以看三个信号:失败是否集中在某个时间段、是否换一个低频率请求仍然失败、错误信息是否指向配额而不是频率。
如果只有频率特征,已有结果值得保留并等待续跑;如果配额或权限特征明显,优先把已有结果导出成独立文件,再评估是否需要更换数据来源。这里的关键动作是立即停止批量重试,避免把剩余配额消耗在必然失败的请求上。停止之后,下一步才有空间判断是恢复调用还是调整采集范围。
当限流只是暂时性的,保护已有结果的核心是保存断点,而不是保存全部原始响应。断点至少包含三样东西:已成功处理的标识列表、最后成功的时间、以及当前使用的请求参数组合。
一个假设例子:某脚本计划处理一千个页面,处理到第三百个时开始返回限流。此时把前三百个结果和时间写入文件,记录下一个待处理序号。等待后从第三百零一个继续,而不是从头重跑。这样做的结果是不重复消耗配额,也让已有结果保持独立可用。
如果限流伴随配额触顶或权限变化,续跑的前提就不成立了。这时要做的不是保存断点,而是把已有结果转成不依赖该工具的资产。具体动作包括:把结果导出为通用格式,补上字段含义说明,并标注哪些字段来自该工具、哪些是后续加工得到的。
保留下来的部分应该有明确用途。例如已经拿到的页面标题、状态码和抓取时间,即使不再调用原工具,也能用于后续人工核对或与另一来源交叉验证。相反,如果某类字段离开原工具就失去解释上下文,就应该在导出时一并保留说明,而不是只留一个数值。
这一步的结果会直接影响下一步:如果导出后的字段仍能支撑判断,就可以继续用这批数据推进工作;如果字段含义不清楚,就需要先补说明,再决定是否重新采集。
第一件是时间边界。限流前后的数据可能来自不同状态,如果不记录时间,后续比较会把变化误当成趋势。第二件是失败记录的处理。失败条目不应直接丢弃,但也不应和成功结果混在一起,最好单独存放并标注失败原因类别,例如频率、权限或参数错误。
另外,请求量或抓取量突然归零,并不能单独证明限流已经解除,也可能是脚本提前退出、参数写错或目标页面结构变化。遇到这种情况,先用少量请求验证,再决定是否恢复批量调用。
比较稳妥的做法是在脚本里预设三个动作:每成功一批就落盘一次、失败达到阈值就暂停、暂停后输出当前断点和参数快照。这样即使限流突然出现,已有结果也不会因为进程中断而丢失,后续无论是等待恢复还是更换来源,都有明确的起点。
如果涉及具体工具或服务的配额、权限和当前可用状态,需要以该工具的实际说明为准,不要仅凭旧经验推断。对已有结果的保护,最终是为了让下一步决策有依据,而不是为了保留一堆无法解释的数据。