先看一个矛盾:自动导出任务显示“成功”,文件大小也正常,但把导出的记录数与站点分页总量对照,却少了几页。大多数情况下,这不是导出程序坏了,而是完整性判断的口径不对——你检查的是“任务有没有报错”,而不是“分页集合有没有被完整覆盖”。要解决这个问题,需要先区分两种解释,再用能区分它们的证据来定位。
自动导出遗漏分页,通常只有两类原因。第一类是分页发现失败:导出工具没有枚举出全部分页地址,比如只读取了首页上的分页链接,而后续页码藏在“下一页”按钮或脚本请求里。第二类是分页抓取失败:地址已经发现,但某几页在请求时超时、被限流或返回空内容,程序跳过并继续执行。
这两类问题的表现很像,都会让最终文件少几页,但修复方向完全不同。发现失败要改的是枚举逻辑,抓取失败要改的是重试与容错策略。如果只凭“总数对不上”就动手改代码,很可能改错地方。
能区分两种解释的关键证据,是导出过程中是否留下了分页地址清单。如果工具在抓取前先输出一份待抓取的分页 URL 列表,就可以直接比对:
如果没有这份清单,退而求其次的办法是看导出日志里的请求记录。日志中出现某几页的请求但响应为空、超时或状态异常,指向抓取失败;日志里根本没有这些页的请求记录,指向发现失败。
这里要提醒一点:请求量或抓取量下降,不能单独证明是发现失败。它也可能是站点临时限流、导出时段网络抖动,或目标页面结构变化导致解析器提前终止。因此判断时要结合清单和日志两类证据,而不是只看一个数字。
假设某次导出目标有 20 页,自动任务只导出了 17 页。可以先手动构造一份完整的分页地址清单(仅用于本次核对),再让导出工具按这份清单执行一次。如果这次得到 20 页,说明原来的枚举逻辑漏了 3 页,属于发现失败;如果按完整清单执行仍然只有 17 页,说明那 3 页在抓取阶段被跳过,属于抓取失败。这个对照动作的价值在于:它把“分页集合”和“抓取执行”两个环节分开验证,结果直接决定下一步是改枚举还是改重试。
要让完整性检查可重复,建议固定三个动作,并记录每个动作的结果:
缺失页的分布位置本身也是证据:集中在末尾,常见于分页终止条件写错;随机分布,更可能是限流或超时;集中在特定地址模式,则要检查枚举规则是否覆盖了全部页码形态。
如果导出频率高、分页数量大,逐页人工核对不现实,此时应优先保留分页清单和失败页记录,把完整性检查做成自动比对;如果导出频率低、页数少,手动对照一次完整清单反而更快。两种做法都成立,区别在于你更需要“可追溯”还是“省时间”。无论选哪种,都不要用“任务成功”替代完整性结论——任务成功只说明程序跑完了,不说明分页被完整覆盖。
具体工具是否提供分页清单导出、失败重试或断点续抓,需要以你实际使用的版本和界面为准,不同工具的入口和字段名称并不一致,核对时以实际输出为准。