断点续传数据采集器
需要一次性获取自 2019 年起逐周积累的 5 年数据。请求过于集中时,响应会在中途中断,当天只能采集到一半;我们从中断处续接,补齐了全部区间。
采集区间
之前
中途停止
之后
2019–2024 全区间
为保护客户信息,画面以模拟数据重新构建了相同功能。
背景
需要获取的数据已积累了 5 年多,是从 2019 年第一周到 2024 年 7 月逐周留存的记录。数据量无法一次取完,而且一旦中途停止,就得先查清已经获取到哪里。项目有时间节点,进度安排十分关键。
现场所见
问题不在采集工具,而在于请求的发送方式。以远超正常浏览速度的频率集中发送请求,响应就会在中途中断,当天只能采集到一半。
问题所在
我们把目标从“快速获取”调整为“完整获取”。与其只取一半就停下,不如多花些时间取全所有区间。数据一旦有缺口,最终还得重新获取。
这一判断的前提是确认采集对象的使用条款和 robots 协议。如果不先确定哪些数据可以获取,后续设计便无从谈起。
解决方案
- 请求间隔与重试控制 —— 分批发送请求,避免集中访问。这样 5 年的数据才能完整获取,中间不留空缺
- 按周分段获取 —— 不把 5 年多的区间作为一个整体处理,而是按周拆分。即使某一周失败,也只需重新获取该周
- 断点续传 —— 记录中断位置。无需从头开始,长时间的采集才能顺利完成
- 剩余时间显示 —— 在界面上显示进度和预计剩余时间。耗时数小时的任务如果没有任何提示,操作人员很可能中途放弃
结果
从 2019 年第 1 周到 2024 年第 30 周,全部区间无一遗漏地获取完毕。 此后,同一架构也已用于其他采集项目。