先给结论:遇到限流时,最该保护的不是“把这一轮跑完”,而是把已经拿到的可用结果与“尚未确认的请求”分开存放,并让脚本进入可恢复状态。一个常见取舍是:保留已有结果并暂停,比继续重试更稳妥;但如果你能确认限流只是短时波动、且已有结果本身不完整,那么改写请求节奏、分批退出,可能比直接停下更合适。判断依据不是“请求返回了什么”,而是已有结果能否独立支撑下一步动作。
限流发生时,脚本往往已经写入了一部分数据。此时第一个动作是检查结果的完整性边界,而不是马上调参重跑。
可核对的证据包括:
如果结果带有批次标识且条数可核对,它更接近完整快照,可以独立用于后续判断;如果只有零散记录、缺少边界信息,它更接近半成品,继续跑或改写请求都可能让状态更混乱。这里的假设是:你的脚本会把结果落盘,而不是只存在内存里。若结果只在内存中,限流一旦触发,保护动作应优先改为“先落盘再退出”。
保留的前提是,已有结果已经能回答你当前要解决的问题。比如你只是要确认某类页面的收录状态分布,已经拿到的样本足以看出趋势,那么继续请求的边际价值很低。
此时的实际动作是:
这个动作的结果是:你保留了可复核的证据链,下一步无论是人工核对还是换时间重跑,都能从明确的位置继续。它的代价是可能错过限流恢复后的短窗口,所以只适合“已有结果已够用”或“限流原因不明”的情况。
改写不等于简单加长间隔。更有效的做法是把一次大请求拆成可独立完成的小批次,并让每批结束后立即落盘。这样即使下一批被限流,前一批仍是完整结果。
适合改写的条件通常包括:
一个注明假设的短例子:假设你原本一次请求 500 条,限流后只返回了 120 条。若把这 120 条单独存为一批,再把剩余请求拆成每批 50 条,那么即使后续再遇到限流,你也能清楚知道哪些批次已完成。这个例子的数字只用于说明拆分方法,不代表任何平台的实际阈值。
如果限流伴随明确的拒绝信号,且多次改写后仍反复出现,继续重试通常只会增加无效请求。此时退出的判断依据是:已有结果是否还能支撑一个降级结论。
退出时至少保留三样东西:原始请求参数、已落盘结果、失败批次的标识。这样下次启动时,你可以选择从失败批次继续,而不是从头再来。退出不是放弃,而是把“保护已有结果”放在“完成全部请求”之前。
请求量下降或返回变少,不能单独证明限流就是唯一原因。它也可能是请求参数写错、目标页面结构变化、或脚本解析失败。区分方法是做一次最小对照:用同一参数请求一个已知可用的对象,观察返回是否正常。
如果最小对照正常,而原请求异常,限流或频率限制的可能性更高;如果最小对照也异常,应先检查参数和解析逻辑,而不是继续调整请求节奏。这个对照动作的结果,会直接决定你下一步是保留、改写还是退出。
最后提醒一点:具体工具的现行功能、入口位置和限制说明,需要以你实际使用的版本和官方说明为准,不要根据旧教程或他人截图直接推断。