先给结论:不要先重跑导出,也不要直接相信“总条数”字段。把手上那份文件当作唯一证据,做一次可复现的边界核对——按分页大小反推应有页数,再逐页确认首尾记录是否连续。只有确认缺口位置后,才决定是补抓遗漏页还是整体重导。下面以你手里的一份导出文件为对象,给出可执行的判断顺序。
自动导出遗漏分页通常有两种成因,处理代价差别很大。第一种是真缺页:某一页请求失败或被跳过,中间整段记录不存在。第二种是边界错位:翻页参数按偏移量推进,但数据在导出过程中发生增删,导致相邻页出现重复或跳号。两种现象的检查动作不同,不能混为一谈。
区分方法:看相邻两页的衔接处,而不是看总数。假设每页 100 条,第 3 页最后一条的排序键是 A,第 4 页第一条应当是紧随 A 之后的值。如果第 4 页首条等于 A,说明偏移量没推进,属于重复;如果明显跳过一段,属于缺页;如果第 4 页首条小于 A,说明排序不稳定,整个文件的可信度都要下调。
这一步是完整性检查的骨架。你需要三个已知量:导出时设定的每页条数、文件里实际出现的页码或批次标记、以及最后一批的条数。用“总条数 ÷ 每页条数”向上取整,得到理论页数,再和实际批次数量对比。
注意一个反常现象:总条数显示为 0 或某个整数,并不单独证明导出正确。它可能来自缓存、可能只统计了当前批次、也可能在数据变动后失去意义。所以条数字段只能作为线索,不能作为结论。
确认缺口后,常见的两个选择是只补抓缺失页,或从头整体重导。它们成立的条件不同。
选择补抓遗漏页的条件:缺失页数量少、位置明确、排序键在两次抓取之间保持稳定、且你能把补抓结果按原顺序合并回文件。代价是合并时容易插错位置,尤其当排序键有重复值时。动作上,先记录缺失页的前后边界键,补抓后只保留落在两个边界之间的记录,再插入。这样做的结果是文件恢复连续,但你需要再跑一次边界核对来确认没有引入重复。
选择整体重导的条件:缺失页分散、排序键不稳定、或数据在导出期间仍在变化。代价是耗时更长,且新文件可能又出现新的边界错位。动作上,重导前先固定一个排序字段并确认它唯一,重导后再做同样的页数反推。如果两次重导的缺口位置不同,说明问题出在抓取过程而非数据本身,应该先降低抓取并发或放慢翻页节奏,再谈补全。
这套清单的关键在于:每一步都产出可对比的证据,而不是只给一个“完整”或“不完整”的判断。当你发现两次核对的结果稳定一致,才能把这份文件用于后续分析;如果每次核对缺口都变,说明数据源或抓取过程本身不稳定,此时任何补全都只是临时掩盖问题。
如果同一份导出连续两三次重导后缺口位置都在变化,继续自动补全的收益很低。此时更合理的动作是缩小导出范围,比如按时间切片分段导出,让每段都短到能在数据变动窗口内完成。代价是文件数量变多、合并步骤增加,但每段的完整性更容易验证。这个取舍的判断依据是缺口是否稳定,而不是缺口大小。
具体到你所用的工具,分页参数名称、最大页数限制、是否支持断点续抓等信息需要以该工具的当前说明为准,不同版本可能不同。在核对完整性之前,先确认这些参数的实际含义,比事后猜测缺口原因更省时间。