先给结论:报告页数大于实际对象数量,通常不是“工具多抓了”,而是同一对象被拆成多条记录、分页被当成新对象、或统计口径把“记录数”写成了“对象数”。处理顺序应该是先确认唯一标识,再在导出数据上做可复核的去重,最后才决定是否调整任务配置。直接改任务往往会把真实差异一起抹掉。
拿你手里的那份报告,不要先看总数,先看每一行有没有稳定的唯一标识。常见情况有三类:
区分方法是看同一标识出现的次数:如果某个标识稳定重复出现,偏向第一类;如果总数正好是每页条数乘以页数,偏向第二类;如果两个数字来自报告不同位置且都标注了不同名称,偏向第三类。这一步不做完,后面的去重都是盲操作。
去重的前提是选对唯一标识。不同对象对应的标识不一样:
选好标识后,把它单独抽成一列,作为后续判断依据。如果报告里没有现成标识,就用链接加发布时间的组合做临时标识,但要接受它可能误判:同一链接在不同时间被再次记录时,会被当成两个对象。这种情况下,去重规则要写明“按链接去重”还是“按链接加时间去重”,两者结果不同。
不要直接在报告界面上凭感觉删行。把数据导出为表格或结构化文本,保留原始行号,然后按唯一标识排序。排序后相邻的重复行会集中出现,便于核对。假设你导出了 500 行,按链接排序后发现某链接连续出现 3 次,且三次的来源字段不同,那么这 3 行应合并为 1 个对象,合并后对象数从 500 变为 498。这个数字变化是可解释的,不是拍脑袋。
如果数据量较大,可以用简单的命令行去重来验证。例如把标识列单独取出后执行:
sort ids.txt | uniq -c | sort -nr
这能告诉你每个标识出现了几次,出现次数大于 1 的就是重复来源。注意这只是在做计数核对,不是最终处理结果;最终去重还要回到完整数据行,避免只保留标识而丢失其他字段。
如果按唯一标识去重后,对象数依然和预期不符,问题多半不在数据本身,而在任务配置或统计口径。此时要核对三件事:
只有确认是任务重复采集,才应该去调整任务;如果只是口径展示问题,改任务反而会减少本该保留的数据。一个实际动作是:先在导出数据上完成去重并记录去重前后的数字,再拿这个差值去对照任务日志。如果差值能由日志中的重试或分页解释,就不必改任务;如果解释不了,再检查任务是否绑定了重复来源。
去重不是一次性动作,而是一次口径确认。处理完后,至少留下三样东西:使用的唯一标识、去重前后的对象数、以及差异原因。这样下一次报告页数再次大于实际对象数时,你可以直接对照记录判断是同类问题还是新问题。
最后提醒一点:报告页数、抓取量或某项统计归零,都不能单独证明去重正确。归零可能来自筛选条件变化、任务暂停或导出范围缩小。判断去重是否成立,要看唯一标识是否稳定、差异是否能被日志解释,而不是只看数字变小。