先给结论:限流发生时,最该保护的不是“继续跑完”,而是已经拿到且尚未落盘的那部分结果。如果脚本把结果攒在内存里、最后一次性写出,限流一旦触发就可能连已完成的部分一起丢失。稳妥做法是让每个批次独立落盘、记录断点,再决定是保留现状、改写请求方式,还是退出等待。
限流可能来自工具服务端、你自己的网络出口,也可能只是脚本并发设置过高触发了保护。这三种情况对“已有结果”的威胁不同:服务端限流通常返回明确错误码,内存里的数据还在;连接被中断则可能让正在写入的文件损坏;并发过高被拒时,往往只有部分批次成功。
可核对的证据包括:错误信息里是否带重试提示、失败是否集中在某一时间段、同一批请求里成功与失败的比例。如果失败集中在脚本启动后的固定秒数,更像是触发频率阈值;如果随机分散,则要怀疑网络或服务端波动。注意,请求量骤降或错误率归零都不能单独证明限流已解除,也可能只是脚本提前退出了。
如果现有结果已经覆盖了大部分目标词,保留并停止扩展是合理选择。前提是这些数据已经写入磁盘,且格式可被后续读取。具体动作:把结果按批次写成独立文件,例如 batch_001.json、batch_002.json,每批附带时间戳和请求参数。这样即使进程被杀,已完成批次仍然可用。
结果如何影响下一步:如果独立文件都能正常解析,说明数据完整,可以进入去重和合并;如果某个批次文件为空或截断,说明写入过程被打断,应从该批次前一批的断点重跑,而不是从零开始。这一步决定你是继续补采还是转入清洗。
当已有结果只是部分覆盖、且缺口明确时,改写比直接退出更合适。改写不是换关键词,而是调整调用方式:降低并发数、在批次之间加入等待、把一次大请求拆成多次小请求。前提是你清楚哪些参数可以调整,并且工具本身允许分批调用。
假设一个短例子:原本每次请求 200 个词、并发 10 路,连续两次被限流;改为每次 50 个词、并发 2 路、批次间等待数秒。这只是说明比较方法,不代表真实额度。改写后要观察的是:失败是否从“整批失败”变成“偶发单条失败”。如果是后者,说明节奏可行,可以继续;如果仍然整批失败,说明问题不在并发,而在调用权限或服务端策略,此时应回到保留或退出。
退出适用于两种情况:一是已有结果已经满足当前分析需要,继续采集的边际价值很低;二是限流原因无法从脚本侧解决,继续重试只会消耗时间并增加被封禁的风险。判断依据不是“还能不能跑”,而是“缺的那部分是否影响结论”。
如果缺口集中在少数长尾词,而这些词本来就不在你的核心分析范围内,退出并保留现有数据是理性的。退出前应做一次完整性检查:统计已落盘批次的词数、去重后的词数、与目标清单的差集。这个差集决定了你后续是补采还是直接使用。不要因为一次限流就断定工具不可用,也不要因为重试成功一次就认为限流已彻底解决。
日志容易被滚动覆盖,断点信息应该和结果放在一起。可以在每个批次文件里记录:本批请求参数、成功条数、失败条数、最后一条成功记录的位置。这样下次启动时,脚本可以直接读取最后一批的状态,从下一个位置继续,而不是重新请求全部。
如果工具支持导出任务状态,优先使用它;如果不支持,就自己维护一个状态文件。需要注意,具体工具是否提供断点续传、状态导出或失败重试接口,属于需要核对的现行功能,不同版本可能不同,不能凭记忆假定。动作的结果是:你能明确知道“已经拿到什么”和“还缺什么”,下一步无论是补采、清洗还是放弃,都有依据。