核心判断只有一条:如果采集对象的边界可以由一个字段稳定描述,就继续用批量词表式输入;如果对象本身带有层级、分页或状态,就必须把输入规范改成“对象清单+范围字段”,否则工具会按旧规则把一批URL当成一个词处理,或者只取到每个URL的第一层。下面用一个假设情境把决策过程走一遍。
假设有一个做本地服务内容的团队,过去用关键词采集工具的方式是每行一个词,一次提交几百行,导出后按词分组。现在他们想改成每行一个页面地址,从页面里反查这个词覆盖了哪些表达。这个变化看起来只是把词换成链接,实际是语义变化:词是一个无层级的字符串,页面地址背后有栏目、分页和参数状态。
区分方法很直接:把新对象的第一行单独拿出来,问它能否用旧字段完整描述。如果答案是“能,只是字符集变了”,那是格式变化,改校验规则即可;如果答案是“不能,还需要知道它属于哪个栏目、取第几页、是否包含参数”,那是语义变化,必须新增字段。这一步做错,后面所有清洗都是白费。
旧规范通常只有一层:一行一个词,去空格、去重复、限制长度。换成对象清单后,至少要有三层约束,每层的作用不同。
type=page。类型不写清,工具无法判断该按词处理还是按页面处理。三层里最先要定的是范围层,因为它决定导出结果能不能用。对象层和去重层只是让流程稳定,范围层决定的是数据是否完整。
规范改完后,不要立刻把全量清单丢进去。取十行有代表性的对象:一行无参数、一行带查询参数、一行有分页、一行属于深层栏目、一行是列表页。按新规范提交,然后检查三件事:每行是否都产生了结果、结果是否覆盖了预期范围、去重后数量是否与手工数出来的层级一致。
假设这十行里有三行只返回了第一页内容,那说明范围层没写对,要回到规范里补上分页规则,而不是在导出后手工补数据。手工补数据会让下一批输入继续踩同一个坑,规范也就失去了约束力。
不是所有对象格式变化都需要重写规范。可以用两个条件来判断:
两个条件都指向“需要新增字段”时,才动规范结构;只有一个指向时,优先改校验规则,避免把简单变化复杂化。
规范一旦改动,旧批次的结果和新批次的结果就不再可比。实际动作是:把旧规范和新规范各存一份,并在导出结果里带上规范版本标识。这样当发现新结果数量异常时,能判断是对象本身变了,还是规范改错了。没有这个标识,两次导出放在一起看,很容易把规范差异误判成业务变化。
如果工具本身不提供版本字段,就在提交前把规范内容写进清单的首行注释或单独的说明文件,保证任何一次导出都能追溯到当时用的是哪套规则。
当对象格式变化太频繁,或者同一批输入里混着多种对象类型时,继续在采集工具里改规范会越来越脆。更稳的做法是先用脚本把对象整理成统一格式,再交给采集工具,让工具只面对一种输入。这样规范只需维护一次,变化被挡在工具之外。代价是多了一个处理环节,适合对象来源多、类型杂的场景;如果对象来源单一、变化不频繁,直接在工具里改规范更省事。
判断依据是变化频率和类型数量:频率低、类型单一时改规范;频率高或类型混杂时先统一再采集。这一步决定的是维护成本落在哪里,而不是工具本身能不能用。