先给结论:自动导出遗漏分页,最常见的原因不是“工具漏抓”,而是导出范围本身没有覆盖全部分页,或者两次导出之间结果集发生了变化。要判断完整性,不能只看导出行数,而要用“分页标记 + 唯一键去重 + 末页复检”三件事交叉核对。下面从一个矛盾现象切入,拆开两种解释,再给出能区分它们的证据。
假设你在爱站里导出某个查询结果,界面显示总数是 480 条,每页 50 条,理论上应有 10 页。自动导出脚本跑完后得到 9 个分页文件,合计 450 条。总数和行数都“看起来合理”,但少了一页。这时有两种常见解释:
这两种解释都会表现为“少了一页”,但检查方法完全不同。前者是请求覆盖问题,后者是排序稳定性问题。
要区分它们,最直接的证据是每个分页文件里是否保留了页码或游标标记。如果导出结果里带有 page=3 这类字段,先检查缺失的是哪一页:
如果导出结果没有页码字段,可以按每页固定条数反推。例如第 4 页应包含第 151 到 200 条,若第 4 页文件不存在,但第 5 页的第一条正好是第 201 条,说明只是第 4 页请求被跳过;若第 5 页的第一条是第 196 条,说明有记录被重复或前移,更可能是结果集变化。
行数只能说明数量,不能说明覆盖。更可靠的做法是:确认结果中是否存在稳定唯一键,例如记录 ID、URL 或标题加时间的组合。把所有分页文件的唯一键合并后去重,再与总数比较。
这里有一个假设例子:某次导出得到 450 行,去重后唯一键只有 430 个,说明有 20 行是重复的。重复通常来自重试时重复抓取同一页,或排序变化导致同一记录出现在两个页码。此时即使行数接近总数,实际覆盖仍然不完整。反过来,如果去重后正好 450 个唯一键,但总数显示 480,则说明有 30 条从未出现在任何分页中,需要回到分页请求日志排查。
无论前面判断偏向哪种解释,都建议做一次末页复检:用相同的查询条件和排序方式,单独请求最后一页,并记录返回的条数和最后一条的唯一键。然后把这次结果与自动导出中最后一页文件对比。
这个动作的结果会直接影响下一步:
末页复检的价值在于:它把“总数对不上”这个模糊现象,拆成了可验证的请求覆盖问题和结果集稳定性问题。只有先确定是哪一类,后续的补抓或重跑才有意义。
上述方法成立的前提是:查询结果有稳定排序,且分页请求之间不会因为登录状态、筛选条件或时间范围变化而返回不同数据集。如果这些前提不满足,任何基于行数或页码的核对都会失真。具体到爱站当前的分页参数、导出字段和排序选项,需要以实际界面和导出文件为准,不能假设某个按钮或参数一定存在。
因此,检查完整性的顺序可以固定为:先确认排序和筛选条件在导出期间不变,再用唯一键去重核对覆盖,最后用末页复检判断是请求遗漏还是结果漂移。这个顺序能避免把“结果集变化”误判成“工具漏抓”,也能避免在请求确实失败时反复重跑却找不到原因。