先给结论:不要按“页数”去重,要按“对象主键”去重。百度搜索引擎优化软件的报告页数通常来自抓取或接口返回的分页记录,而实际对象数量取决于你定义的唯一标识。两者不一致时,先确认唯一标识是否稳定,再决定是合并同一对象的重复行,还是保留多行但标记为同一对象的不同状态。
假设你导出的一份报告有1200行,但去重后只剩980个对象。这时有两种可能。第一种是同一对象被多次记录,例如同一URL带不同参数、同一页面在移动端和PC端各出现一次、同一标题在列表页和详情页都被抓取。第二种是对象定义本身有问题,例如你把“页面”当对象,但报告实际按“URL+查询参数”统计,导致一个页面被拆成多个对象。
区分方法很简单:抽10行,检查唯一标识字段。如果唯一标识是URL,就把URL规范化后再看重复是否消失;如果唯一标识是页面ID,就检查同一ID是否对应多个URL。这一步的结果决定下一步:重复行可以合并,对象分裂需要先统一对象定义。
去重时有两个常见做法。做法A:按URL完全匹配去重,保留第一条。做法B:按URL规范化后去重,保留最新一条。两者成立条件不同。
实际动作:先导出唯一标识列,用url字段做一次分组计数。如果某个URL出现次数大于1,查看重复行的来源字段,例如“来源页面”或“抓取时间”。如果重复行来自同一来源且时间接近,按URL去重即可;如果重复行来自不同来源,保留多行但增加“对象主键”列,后续按主键聚合。
假设你手中有三个URL:/a、/a?from=list、/a?from=detail。如果对象是“页面”,这三个应合并为一个,主键取/a。如果对象是“入口”,这三个应保留为三个,主键取完整URL。报告页数1200,按页面主键去重后可能变成980;按入口主键去重后可能仍是1200。这个比较说明:去重结果不是由页数决定,而是由你事先定义的对象决定。
动作结果如何影响下一步:如果按页面主键去重后数量仍高于预期,检查是否有同一页面被不同域名或不同协议记录;如果按入口主键去重后数量低于预期,检查是否把不同入口误合并。两种结果都会改变你后续是继续清洗数据,还是回到对象定义阶段。
去重后如果报告页数与实际对象数量仍不一致,不要继续删行。保留以下字段:原始行号、唯一标识、规范化后的主键、重复次数、首次和末次出现时间。这样做的目的是让下一次核对有依据。例如,某对象重复3次,你可以判断是抓取重复还是对象本身有多个状态。如果重复次数随时间增加,可能是抓取频率问题;如果重复次数固定,可能是报告生成规则问题。
最后,把去重规则写成一段可执行说明,例如“按规范化URL分组,保留最新抓取时间,输出主键、重复次数、原始URL列表”。这段说明交给执行人员后,对方能复现你的去重结果,而不是只看到页数变化。