没有真实业务数据时,练习容易滑向两个极端:要么随便抓一个公开页面,把“跑通”当成学会;要么凭想象设定字段和规则,结果无法判断错在哪里。更可用的做法是构造一组有限假设——先写下你预期页面会怎样组织、采集器会怎样解析,再用最小规模的抓取去核对。核对结果只回答“假设是否成立”,不回答“采集器好不好用”。
假设两个人用同一个公开列表页做练习。甲抓到了标题和链接,认为规则已经正确;乙抓到的标题里混着日期和栏目名,认为选择器写错了。两人看的其实是同一份结果,分歧出在对“正确字段”的定义不同:甲只要非空就算成功,乙要求字段内容与页面语义一致。
这类分歧在没有业务数据时特别常见,因为缺少“这条记录应该长什么样”的参照。把分歧写成可核对的假设,比争论谁对更有用。
对上面那类结果,通常有两种解释。
两种解释对应完全不同的下一步:前者要改选择器,后者要改字段定义或增加过滤条件。如果直接开始调规则,很可能把本来正确的部分一起改坏。
设计一个能产生区分度的动作:只抓前若干条记录,逐条对照页面原文,记录每条异常出现在哪个位置、异常片段是什么。
判断依据可以这样用:
这个动作的结果会直接影响下一步:如果证据偏向解释一,继续在规则层面迭代;如果偏向解释二,先明确“哪些条目应该被排除”,再决定是过滤还是分模板处理。
没有业务数据时,假设必须有限,否则核对成本会失控。
假设写成一句可核对的话,例如:“该列表页前二十条中,标题字段不应包含日期。”抓完后逐条核对,结论只有成立或不成立,不需要额外解释。
假设某公开列表页的条目分为普通条目和推荐条目,推荐条目多一个标签。你预期选择器会同时命中两类,于是设定过滤条件“排除含推荐标签的条目”。抓取后如果普通条目数量与页面可见数量一致,说明过滤条件覆盖了主要情况;如果仍有多余记录,说明还有第三种模板没被识别。此时下一步不是继续加过滤词,而是回到页面确认是否遗漏了模板类型。
这个例子里,数字只用于比较“抓到的条数”和“人工数出的条数”,不代表任何真实站点的规模或效果。它的作用是让假设可被证伪,而不是证明某种写法更优。
当你的假设连续几轮都能被核对结果明确支持或否定,且每次否定都能定位到具体原因时,练习的目的就达到了。反过来,如果每次调整都只是让结果“看起来好一点”,却说不清是哪条假设被验证,那说明样本或字段仍然太宽,应该退回更小的核对范围,而不是继续加规则。