先别重跑。把中断前后的日志、结果文件和任务参数放在一起,用“最后一条完整记录”划出边界,再决定是补扫还是全量重来。判断覆盖范围的核心不是看进度条,而是看哪些页面已经产生了可核对的结果记录,以及这些记录是否对应同一批关键词和同一套参数。
全站扫描通常分三层推进:任务调度层、页面抓取层、排名解析层。中断可能只停在调度层,也可能已经写入了部分解析结果。判断方法很直接:打开结果文件,找时间戳最大的若干条记录,看它们是否包含完整的页面标识、关键词、排名位置和检测时间。如果最后几条只有页面标识没有排名字段,说明解析层没走完,这批数据不能算已覆盖。
另一种常见情况是任务被手动暂停而非崩溃。此时调度层可能已经标记了“已处理”的页面,但结果文件尚未刷新。遇到这种不一致,以结果文件为准,不要以任务状态为准。任务状态只反映调度意图,结果文件才反映实际产出。
不要凭记忆估算覆盖了多少页面。从读者手头已有的资料里提取三样东西,逐项比对:
假设一次扫描计划覆盖800个页面、每个页面查20个关键词,中断时结果文件里有6200条完整记录。用6200除以20得到310个页面,但还要检查这310个页面是否都出现在页面清单里、是否有重复页面被多次写入。如果发现某个页面出现了40条记录,说明它被查了两轮,实际覆盖页面数要往下修正。这个数字只用于说明核对方法,不代表任何工具的实际产出规模。
结果文件里没有某页面,可能是三种原因:任务还没轮到它、抓取时页面不可访问、解析时没有匹配到排名。这三种情况的后续动作完全不同。要区分它们,需要看抓取日志或错误记录,而不是只看结果文件。
如果日志里该页面有请求记录但返回错误状态,说明已尝试但未取得有效数据,补扫时应保留该页面的重试标记。如果日志里完全没有该页面的请求记录,说明调度层没推进到它,属于纯未覆盖。如果请求成功但结果文件无排名字段,可能是该关键词在该地区确实没有可见排名,也可能是解析规则未命中,需要抽样人工核对一两条再决定是否重扫。
这里有一个容易犯的错:把“结果文件里没有”直接等同于“未覆盖”。结果文件通常只记录有排名的条目,没有排名的页面天然不会出现。所以划边界时,页面清单和结果文件的差集只能说明“没有排名记录”,不能说明“没有扫描”。要确认扫描动作是否发生,必须回到请求日志。
补扫适合以下条件同时成立:结果文件的时间戳连续、参数快照与本次一致、未覆盖页面在页面清单里可明确列出、且已覆盖部分的记录没有重复或截断。此时只需对差集页面发起新一轮任务,把新结果追加到原文件,并保留两批记录的时间戳以便后续区分。
重扫适合以下任一条件成立:结果文件最后若干条记录不完整、参数在中途被修改过、页面清单本身不完整或已过期、或者已覆盖部分存在大量重复记录无法去重。重扫的代价是时间,但换来的是整批数据可比。如果后续要用这批数据做页面之间的横向比较,参数不一致的补扫结果会引入难以解释的偏差。
实际操作中,可以先做一次小范围验证:从差集里抽10个页面补扫,把新结果和原结果中相邻页面的记录格式、字段完整性做对比。如果格式一致、字段齐全,再扩大补扫范围;如果发现字段缺失或格式变化,说明工具版本或配置已经变了,补扫不再安全。
完成上述核对后,产出一份简短的处理决定,至少包含:已确认覆盖的页面数及其依据、未覆盖页面的来源(差集、日志缺失、解析失败)、选择补扫或重扫的理由、以及补扫时需要沿用的参数快照。这份决定不需要复杂格式,但必须让下一个执行的人能直接照着发起任务,而不需要重新推断中断前的状态。
如果选择补扫,任务发起后要立即记录新的任务参数和时间戳,避免第二次中断时又出现边界不清。如果选择重扫,建议在任务开始前先导出一次完整的页面清单和参数快照,作为下一次中断时的对照基准。判断覆盖范围的最终目的不是追求一个精确的完成百分比,而是让后续动作有明确的输入和可验证的输出。