自动导出遗漏分页,通常不是导出按钮坏了,而是分页边界、合并逻辑或去重规则在某个环节截断了数据。检查完整性的可行办法是:先固定一个可复现的样本,用总数、序号连续性和边界记录三项交叉验证,再决定是否扩大导出范围。
把一次导出拆成三层来看:抓取层负责逐页取回数据,合并层负责把多页拼成一个文件,输出层负责去重和截断。三层都可能造成遗漏,但表现不同。
如果导出文件里页码字段从 1 到 N 连续,但 N 小于页面提示的总页数,问题多半在抓取层,可能是翻页参数在某一页后失效。如果页码跳号,例如从 7 直接到 9,问题在合并层,通常是并发抓取时某一页返回空结果被跳过。如果页码齐全但行数明显偏少,问题在输出层,可能是去重规则把不同页的相似记录误判为重复。
判断动作:随机挑一个中间页,单独导出该页并与整份导出文件比对。若单页能取到记录而整份文件中找不到,就锁定在合并或去重环节;若单页也取不到,问题在抓取层。这个结果直接决定下一步是改翻页逻辑还是改合并脚本。
不要凭“看起来差不多”判断完整性。对读者手中的那份导出文件,可以计算三个指标:
假设某个列表共 40 页、每页 20 条,理论总数 800。导出文件去重后是 760 行,缺口 40 行,恰好等于两页。这时优先怀疑末尾两页未取回,而不是去重误删。若缺口是 3 行、分布零散,则更可能是去重或解析丢字段。这个比较方法只是缩小范围,不能单独证明哪一层出错。
分页遗漏有相当比例发生在边界:第一页、最后一页、以及页码切换的那一条记录。常见原因包括接口用游标而非页码、末页返回空数组被当成结束、以及翻页参数从 1 开始还是从 0 开始不一致。
检查动作:把导出配置里的起始页改为 1,结束页改为一个明显大于实际总页数的值,再跑一次。如果结果比原来多出记录,说明原配置的结束页设小了;如果结果不变但仍少于总数,说明遗漏不在结束页,需要回到抓取层查翻页参数。
还要注意边界重叠:某些分页在页与页之间重复返回同一条记录。重叠本身不会造成遗漏,但会让去重后的行数偏少,从而掩盖真实缺口。核对时把“原始行数”和“去重后行数”分开记录,两个数字都要看。
个别样本成立、规模化后出现例外,通常有三个来源。
因此,小样本验证通过不能直接照搬到全量导出。适用条件是:源数据在导出期间基本静止,且脚本对错误页有明确记录而非静默跳过。不满足这两条时,应先分批导出并保留每批的原始文件,再合并,而不是一次性拉全量。
对读者手中那份导出文件,可以按以下顺序处理:
手工补行会让后续每次导出都无法自动比对,缺口会重新出现且难以定位。修好抓取逻辑后重跑一次,用同样的三个数字验证,缺口应能解释或消失。如果缺口仍在但位置改变,说明问题与数据顺序有关,需要改用按时间分片的导出方式。
最后要接受一个边界:任何自动导出都只能证明“这次取回的数据内部一致”,不能证明源站没有更早或更晚的数据。完整性检查的目标是让缺口可见、可解释,而不是保证零缺口。