迁移练习的目标不是再抄一遍采集规则,而是让同一套操作在结构不同的页面上也能跑通。先判断变化属于“字段位置变了”还是“页面关系变了”:前者靠定位方式迁移,后者要靠采集流程迁移。两种条件对应不同练法,混在一起练容易把偶然成功当成掌握。
如果目标页只是把标题从 <h1> 挪到 <h2>,或者列表项从 <li> 换成 <div>,但每条记录仍各自包含完整字段,这属于同一层内的结构变化。此时失效的原因通常是选择器写得太死,绑定了标签名或固定序号。
练习动作:拿一个已跑通的规则,只改页面结构,不改字段逻辑,然后强制自己用三种方式各写一遍定位——标签加类名、纯类名、相对父节点的路径。写完后逐条记录哪种在目标页上取到了值、哪种取空、哪种取到了相邻记录的内容。这个记录会影响下一步:如果只有标签加类名能取到,说明规则依赖标签顺序,换到同类页面仍有风险;如果纯类名也能取到,迁移空间更大。
注意边界:同一层变化里,如果字段本身被拆成两个节点(例如标题和副标题分开),就不再是定位问题,而要回到字段合并逻辑,不能继续用替换选择器来硬凑。
当列表页不再直接包含详情字段,而是要点进二级页才能拿到正文,或者分页从 ?page=2 变成滚动加载,这属于页面关系变化。此时选择器写得再通用也没用,因为采集的先后顺序和入口本身变了。
练习动作:先画一张流程草图,标出从哪个地址进入、哪一步拿到详情链接、哪一步取字段,再对照原规则找出哪一步被跳过。然后只改流程,不改字段定位,看能否跑通。假设一个练习场景:原规则从列表页直接取标题和链接,新页面列表页只有链接、正文在详情页,那么迁移练习应先在列表页只取链接,再在详情页取标题,而不是把两个页面的选择器塞进同一个步骤。假设的数字只用于说明步骤拆分,不代表实际页面数量。
例外:如果详情页链接由脚本动态生成,而采集环境不执行脚本,那么流程调整也无法解决,需要换入口或改采集方式。这时应停止在流程层继续试,先确认链接是否真实存在于响应内容中。
不要凭感觉判断是定位问题还是流程问题,用下面这组证据区分:
这组证据的作用是决定下一步动作:定位层问题就做选择器替换练习,流程层问题就做步骤拆分练习。抓取量归零也可能来自网络、权限或页面改版,不能单独证明是规则写错。
第一,每次只改一个变量。改页面结构就不改字段逻辑,改流程就不改定位方式,否则失败后无法归因。第二,练习页要来自不同来源,避免同一站点的模板相似导致假迁移。第三,记录失败时的页面快照或响应片段,便于回看是选择器问题还是内容未加载。
一个可执行的短流程:选一个已跑通的规则,复制成三份;第一份只改标签结构,第二份只改分页方式,第三份只改字段所在层级;分别运行并记录哪一份失败、失败在取数还是取字段。根据结果决定下一轮练定位还是练流程。这样练出来的不是某条规则,而是遇到新页面时先判断变化类型再动手的习惯。