采集规则编写 - 用规则去重避免重复建设页面

📍 WDQWDWQD987AAAAA:216.73.216.182
📱 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
🔗 /6a70e6e6b819.html
📄

采集规则编写 - 用规则去重避免重复建设页面

避免重复建设页面的核心,是在采集规则编写阶段就加入唯一标识与去重判断,让同一内容只生成一个页面。假设你要采集一个商品站,列表页有分页、详情页有规格参数,如果规则只按标题生成 URL,同一商品在不同分页出现就会重复入库;正确做法是先确定唯一键,再在写库前比对,命中已有记录就跳过或合并。

先确定什么算“同一个页面”

去重不是比对整段 HTML,而是找出能代表内容的稳定字段。常见唯一键有三类:

判断标准是:同一实体在不同入口出现时,这些字段是否保持一致。如果列表页跳转链接带会话参数,就必须先规范化再当唯一键,否则同一商品会被当成多条。

在规则里加入去重步骤

把采集规则拆成“提取—规范化—比对—写入”四步,去重放在比对环节,而不是等页面全部生成后再清理。具体可执行的做法:

  1. 提取阶段同时抓取详情页 URL 和页面内的业务 ID。
  2. 规范化阶段统一小写、去掉跟踪参数、补全相对路径。
  3. 比对阶段用唯一键查询已有记录;命中则记录来源,不新建页面。
  4. 写入阶段只对未命中的记录建页,并保存唯一键供下次比对。

常见错误是把去重条件写成“标题相同”。标题可能被站点改写、加后缀或省略,仅凭标题会漏判,导致同一内容出现多个页面。

分页与列表重复怎么处理

列表页翻页时,同一详情链接会反复出现,这是重复建设的高发点。规则中应把列表页只当作发现入口,不直接生成页面;所有页面统一由详情页规则产出。若站点用不同 URL 指向同一详情,例如带和不带结尾斜杠,需要在规范化阶段合并。判断结果:如果两次采集得到的唯一键相同,就只保留一条,另一条作为来源记录。

用检查项验证去重是否生效

规则上线前,用一小批数据跑一遍并核对:

适用条件是站点结构相对稳定;如果详情页 URL 本身会随登录状态变化,唯一键就要改用业务 ID 而非 URL。发现重复仍存在时,先检查规范化是否漏了参数,再检查比对是否在写入之前执行。

下一步:挑一个已有列表页和详情页的目标站,先只写提取与规范化两步规则,跑十页数据,人工核对唯一键是否稳定,再补上比对与写入逻辑。

图1 图2

nginx