记录改动前后的基线,核心是让“改前”和“改后”两份数据在抓取范围、字段定义、时间点和判定标准上完全一致。隐藏链接检测本身不会自动产生可比结果,只有先固定采集口径,再对页面逐项留档,才能判断某次处理是否真正减少了隐藏链接,而不是把抓取波动误当成改动效果。
假设目标是确认“移除页面底部一组不可见外链”是否生效,交付结果应当是一份可复核的对比记录,而不是一句“已处理”。由此倒推,至少需要四类资料:
缺少抓取清单,两次结果就无法对应;缺少页面证据,后续复核只能依赖记忆;缺少判定依据,不同人会对同一个链接得出相反结论。
基线可比的前提是口径一致。改动前后应使用同一套抓取规则,包括是否执行JavaScript、是否携带登录状态、请求头与超时设置、并发数量、是否跟随重定向。任一项变化,都可能让某些链接在第二次抓取中消失或出现,与页面改动无关。
时间点也要写清楚。建议记录抓取开始与结束的绝对时间,而不是只写“上午”。如果站点有缓存或CDN,还需注明抓取是否命中缓存,以及缓存刷新时间。对于动态渲染页面,最好同时保存渲染后的DOM和原始响应,因为隐藏链接可能只存在于其中一份。
字段定义要落到可操作层面。例如“隐藏”可以拆成多个可检查项:
把每项写成“是/否/无法判断”,比只给一个总分更容易在两次记录之间对齐。
模板的作用是防止漏项。可以按URL逐条记录,字段包括:URL、抓取时间、抓取方式、疑似链接的HTML片段、隐藏判定项、判定结果、处理动作、处理后复检结果。改动前填一遍,改动后填一遍,两遍使用完全相同的列。
这里给一个假设示例,仅用于说明记录方式:某页面底部有一个指向外部站点的链接,改动前记录为“文字颜色与背景色差值为0,可见面积为0,判定为隐藏”;处理后复检记录为“该链接已从HTML中移除,页面其他链接未变化”。两次记录都保留原始片段,复核者可以自行判断,而不是只看结论。
如果无法保存完整HTML,至少保留能定位问题的片段和其在文档中的位置描述,例如所在容器、前后相邻文本。片段过短或脱离上下文,后续很难确认是否同一处改动。
责任划分要对应到具体动作:谁负责抓取、谁负责判定、谁负责修改、谁负责复检。抓取和判定最好由不同人完成,减少同一视角带来的偏差。复检人应拿到改动前的基线记录,但不依赖执行人的口头说明。
验收条件在动手前就应写定。例如:改动后,基线清单中判定为隐藏的链接全部不再满足隐藏条件;原本正常的链接没有新增隐藏判定;两次抓取的URL覆盖率差异在可解释范围内。若验收条件只写“隐藏链接减少”,就无法判断减少的是目标链接还是抓取遗漏。
需要区分“可能原因”和“已经定位的原因”。改动后某链接不再出现,可能是链接被移除,也可能是页面结构变化导致抓取未覆盖、渲染失败或重定向跳转。只有在证据链能排除后几种解释时,才能写成已定位。
在实施任何移除或调整之前,先用最终确定的模板完整跑一次抓取与判定,保存URL清单、页面片段和逐项判定结果,并记录抓取口径与时间。这份只读基线将成为后续所有对比的参照。等改动完成,再用同一口径复检一次,把两份记录并排核对,差异项逐条给出证据或标注无法判断的原因。