先给结论:如果导出任务采用了分页抓取,而某一页因为超时、限流或中途中断没有返回,工具通常不会自动补抓,最终文件看起来完整,实际却少了一段。判断完整性不能只看总条数,而要用分页边界、时间戳和抽样比对三组证据交叉验证。只有当你保留了每页的请求记录,或者导出文件带有分页标识时,这种检查才成立;如果工具只输出一个合并后的结果文件,没有任何中间痕迹,那么下面这套方法只能部分适用,你需要改用抽样对账。
很多遗漏发生在“最后一页”或“中间某一页”,原因是分页参数跳页或去重逻辑误删。检查时先看文件是否包含页码、抓取时间、请求参数这类字段。如果有,按页码排序,观察是否存在跳号、重复页或空页。例如假设某次导出共 12 页,文件里出现第 1 到第 10 页、第 12 页,缺失第 11 页,这就是典型的分页断档。此时不要急着重新导出全部数据,先确认第 11 页对应的查询条件是否被限流,再决定是补抓单页还是整体重跑。
如果没有页码字段,可以借助导出时的日志或任务记录。多数工具会保留每次请求的时间戳,把时间戳按顺序排列,看相邻请求的间隔是否异常拉长。间隔突然变大,往往意味着某一页重试或超时,这一页最可能被遗漏。
分页遗漏最容易在边界暴露。检查第一页和最后一页是否都存在,且最后一页的记录数是否少于或等于每页上限。如果最后一页恰好等于每页上限,说明后面可能还有未抓取的内容,需要确认工具是否判断过“是否还有下一页”。
总数验证要谨慎。工具显示的总条数可能来自接口返回值,也可能来自已抓取条数的累加。如果总数是累加值,那么遗漏一页后总数也会同步变小,看起来反而“自洽”。这时要拿另一个来源比对,比如按不同排序方式再导出一次,比较两次结果的交集和差集。两次导出如果条数差异明显,说明至少有一次分页不完整。
有些遗漏不会造成跳页,而是某一页只返回了部分记录。这种情况下页码齐全,总数也正常,但内容缺失。可用的办法是抽样:从已知存在的记录中挑若干条,确认它们是否出现在导出文件里。抽样要覆盖不同时间段和不同来源,不能只查最新几条。
另一种抽样是反向验证:随机取导出文件中的若干条,回到原系统或原页面确认其状态是否仍然有效。如果发现大量记录在导出后已经失效,说明导出时间与当前状态存在偏差,这属于时效问题,不是分页遗漏,但会影响你后续是否保留这条链接的判断。
反例很明确:如果工具在导出时已经做了服务端全量合并,分页只是展示层的行为,那么文件里本来就不会有分页痕迹,按页码检查会得出错误结论。此时正确做法是看导出任务的完成状态和校验值,而不是逐页核对。另一个失效场景是数据源本身不支持稳定排序,同一查询条件两次执行返回的顺序不同,分页边界会漂移,导致重复或遗漏,这种情况下任何基于页码的完整性判断都不可靠,需要改用基于唯一标识的去重比对。
完成上述检查后,你会得到三种结果:确认完整、确认缺失、无法判断。确认完整就可以进入下一步,对仍然有价值的旧链接保留,对已失效或不再相关的部分安排退出。确认缺失时,先补抓缺失页,再重新做一次边界和抽样验证,不要直接在全量文件上做删除操作。无法判断时,最稳妥的动作是换一种排序或换一个时间窗口重新导出,用两次结果的差集来定位问题,而不是凭感觉认为文件可用。这个动作的结果会直接决定你是继续处理链接状态,还是先解决导出流程本身的可重复性问题。