先给结论:多数情况下不是工具算错,而是同一友链对象被拆成了多个可识别单元。报告页数按“抓取到的页面或记录条数”计数,实际对象数量按“去重后的站点或链接主体”计数,两者天然会差。真正要处理的遗漏条件是:去重前必须先确定以什么字段作为对象身份。身份字段选错,去重就会把不同对象合并,或者把同一对象继续拆开。
报告页数明显多于实际对象,通常只有两类原因,而且它们的证据不同。
解释一:分页或导出切分造成的重复记录。工具在翻页、分批导出或断点续抓时,把同一批对象重复写进报告。特征是重复项高度成组出现,对象字段完全一致,只是行号、时间戳或批次号不同。这类重复是机械重复,去重规则简单。
解释二:同一对象有多个入口或多种写法。同一个友链对象可能以首页、内页、带参数地址、带或不带协议、主域与子域等形态分别出现。工具把它们当成不同记录,报告页数自然虚高。特征是重复项之间字段并不完全一致,域名主体相同,但路径、参数或前缀有差异。这类重复是身份重复,去重规则必须基于对象身份,而不是整行比对。
不要凭感觉判断,先做一次可复核的抽样。
一个假设例子:某次导出报告有 1200 行,按域名主体统计唯一值只有 430 个,但其中约 200 个唯一值其实是同一主域的不同子域。此时报告页数虚高由两层原因叠加:分页重复贡献了一部分,身份字段过细又贡献了一部分。这个数字只用于说明比较方法,不代表任何真实项目结果。
去重动作本身不难,难的是先定身份。常见的身份层级有三种,选择不同,去重结果完全不同。
实际动作:先选定一种身份层级,把它写成明确的归一规则,例如统一小写、去掉协议与 www、去掉跟踪参数、只保留主域。然后用这个规则生成一个身份键,按身份键去重。结果会直接影响下一步:如果去重后数量仍与预期不符,说明还有分页重复或抓取遗漏;如果去重后数量骤降,说明身份键定得过粗,需要回退到更细的层级。
建议把处理拆成两步,便于定位问题出在哪一层。
第一步,只处理机械重复。按完整记录比对,去掉行级重复,记录去掉多少条。这一步的结果反映分页或导出切分的影响。
第二步,再按身份键去重。在第一步结果上生成身份键并去重,记录再去掉多少条。这一步的结果反映同一对象多入口的影响。
两步分别留数,就能回答“报告页数与实际对象数量不一致”到底由哪一层造成。若第一步去掉的很少、第二步去掉的很多,问题在身份字段;若两步都去掉很多,说明分页重复和身份重复同时存在。这个拆分不承诺任何固定比例,只是让差异可归因。
如果两步去重后数量还是对不上,通常是以下条件之一被漏掉:抓取范围本身包含了非友链对象;导出时字段截断导致身份键生成错误;大小写、全半角、协议或末尾斜杠未归一;同一对象在报告中以不同语言或不同编码出现。此时不要继续叠加去重规则,而应回到身份定义,确认这些差异是否应被视为同一对象。必要适用条件是:只有当业务上确实把主域视为同一对象时,按主域去重才成立;否则应保留更细粒度,并在报告中注明计数口径。具体工具当前支持哪些字段、导出格式与去重入口,需要以你实际使用的版本为准进行核对。