被限流不等于已有结果作废。你真正要保的是三样东西:已经成功返回并落盘的外链记录、能说明这批记录覆盖范围的请求日志、以及可安全续跑的断点位置。只要这三样还在,限流只是把一次批量任务切成多段,而不是让前面的工作重来。下面以你手里已经导出的那份外链结果文件为对象,说明怎么处理。
同一个“请求失败”背后可能是完全不同的原因,处理方式也不一样。先分清三种情况:
区分方法很直接:翻请求日志里的状态码和返回体。如果返回体结构完整、只是条数为零,先怀疑分页或权限,而不是急着换IP重试。把原因判断错,会导致你把有限的重试次数浪费在不会成功的方向上。
限流发生后第一件事不是继续请求,而是停止写入、锁定已有数据。具体动作:把当前结果文件复制一份,命名为带时间戳的只读副本,后续所有清洗和去重都在这份副本上做,原始文件不再被脚本覆盖。
这一步的实际影响是:即使后面续跑时脚本逻辑被改动、字段映射调整,你仍有一份可回溯的原始快照。外链数据的价值往往在字段完整性上,一旦被新一批不完整的结果覆盖,前面成功的部分就找不回来了。假设你已抓到 800 条,脚本默认以“覆盖”模式写文件,第二次运行只成功返回 200 条,最终文件就只剩 200 条——固化副本能避免这种损失。
续跑前需要知道“已经覆盖到哪里”。如果脚本记录了每个请求的参数(如目标域名、分页偏移、时间范围),就能算出可信区间:哪些范围是完整返回的,哪些是中途断掉的。
判断标准可以这样设:
这样做的结果是续跑范围从“整个任务”缩小到“可疑页加未覆盖页”,请求量下降,再次触发限流的概率也随之降低。注意,请求量归零或某页返回为空,不能单独证明该范围没有外链,它也可能只是被限流、权限不足或参数写错,需要结合日志状态码一起看。
限流后最常见的错误是加大重试力度。更稳的做法是反向调整:降低并发数、在请求之间加入固定间隔、对失败请求采用递增等待再重试。这些改动只影响节奏,不影响你要采集的范围和字段。
如果你缺少完整权限或拿不到全部数据,仍然可以执行的最小动作是:只针对已标记为“可疑”和“未覆盖”的范围跑一次低并发补采,采到的部分与固化副本合并去重。能得到的结论仅限于“这批范围内新增了多少条”,不能推出整体外链总量或质量分布,因为未覆盖范围仍是空白。
补采结果与原始副本合并时,给每条记录加一个来源标记,区分“首次成功”和“补采成功”。同一外链在不同批次重复出现时,保留首次成功的记录,补采记录只用于填补缺口。
这样处理的好处是:当下次再遇到限流,你能立刻知道哪些数据是稳定的、哪些依赖补采,评估后续任务时不必重新核对全部记录。合并完成后,把可信区间、未覆盖范围和补采时间写进一个简短的说明文件,和结果放在一起。执行人员拿到这份文件,就能判断这批外链结果能支撑什么结论、还缺什么,而不需要你再口头解释一遍限流经过。