先给结论:报告页数大于你预期的对象数量,通常不是“多测了”,而是同一对象被拆成了多条记录。去重的关键不是删行,而是先确定“一个对象”由什么字段唯一标识,再决定按标识合并还是按标识过滤。多数情况下,先用URL规范化加参数剔除,再按最终URL做一次唯一值核对,就能把绝大多数重复解释清楚。
报告页数超过实际对象数,最常见的两种解释是:同一对象有多个可访问地址,以及同一地址被多次采集。前者是对象本身的口径问题,后者是采集过程的问题,两者的处理方式完全不同。
如果报告里同一URL出现多次且时间戳接近,偏向采集重复;如果URL字符串各不相同但打开后是同一页面,偏向地址别名。这个判断会直接改变你下一步动的是采集配置还是结果表。
不要凭感觉去重,先取一小段样本做核对。把报告按URL排序,统计每个URL的出现次数,同时记录每条的采集时间、来源节点和HTTP状态码。可以区分解释的证据有三类:
一个假设例子:报告显示1000行,你预期的对象是600个。按URL完全一致统计后发现,其中300行是同一批URL由两个节点各记一次,另外100行是带跟踪参数的变体。那么真正需要合并的是前者,需要规范化的是后者,剩下的600行才是对象本体。这个拆分动作做完,去重规则才有依据。
面对重复,通常有两种做法:按唯一标识合并成一行,或按唯一标识保留一条、过滤其余。选择取决于你后续要拿这份报告做什么。
判断条件很直接:报告要回答“有多少个对象”,就合并;要回答“这次采集对不对”,就过滤。两者混用会让页数既不是对象数,也不是采集次数,反而更难解释。
先定义唯一标识,再动手。常见做法是把URL转成小写、去掉跟踪参数、统一结尾斜杠和协议,然后以规范化后的URL作为唯一键。在结果表里新增一列存放这个键,而不是直接覆盖原始URL。
这一步做完,你会立刻看到两个结果:一是重复行的分布变得可见,能确认重复到底来自参数、协议还是节点;二是原始URL仍然保留,随时可以回退核对。如果规范化后重复率仍然很高,说明问题在采集侧而非地址侧,下一步就该去查请求重试和节点调度,而不是继续加去重规则。
需要提醒的是,请求量或抓取量归零、重复率突然下降,都不能单独证明去重做对了。它也可能是采集中断、对象被过滤或规范化规则误伤了正常URL。判断去重是否正确的依据,始终是抽样核对:随机抽若干唯一键,确认它们确实对应不同的实际对象。