关键词扩展工具:一次全站扫描被中断后怎样判断已覆盖范围

📍 WDQWDWQD987AAAAA:216.73.217.7
📱 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
🔗 /a603c849acfe.html
📄

关键词扩展工具:一次全站扫描被中断后怎样判断已覆盖范围

判断覆盖范围不能只看工具跑到了哪一行,而要先确认中断发生在“发现链接”阶段还是“抓取并解析”阶段。如果中断前已经完成链接发现,你手里会有一份待处理队列;如果连队列都没落盘,中断后能恢复的只是已抓取部分,未抓取部分不能靠推测补齐。下面按两种条件分别说明怎么核对、怎么补扫,以及什么情况下补扫反而会误导你。

先分清两种中断条件,决定是续跑还是重扫

第一种条件:工具支持断点续跑,并且中断前的进度有持久化记录。这时你要核对的不是“跑了多少条”,而是“待抓取队列里还剩多少条未处理”。可核对的证据包括:任务日志里最后一次写入的队列快照、已抓取URL清单、以及失败/跳过清单。把已抓取清单与队列快照做差集,得到的就是未覆盖部分。若差集很小且集中在同一目录层级,直接续跑即可。

第二种条件:中断后队列丢失,或工具本身不落盘队列。这时“已抓取清单”只代表已覆盖,不能反推未覆盖。你需要用站点自身的链接结构重新界定范围:从首页和已知栏目页出发,按站内链接层级重新枚举,再与已抓取清单比对。这个动作的结果决定下一步——如果重新枚举出的URL集合明显大于已抓取清单,说明覆盖缺口大,应重扫;如果两者接近,说明中断前已覆盖大部分,只需补扫差集。

判断依据可以归纳为一句:有队列快照就做差集续跑,没有队列快照就重新枚举再比对。不要用“已抓取数量除以预估总数”来估覆盖率,因为预估总数本身没有可核对来源。

用三类证据区分“真的没覆盖”和“看起来没覆盖”

中断后最容易出现的反常现象是:已抓取清单里没有某个URL,于是判断它未被覆盖。但这个结论有三种合理解释,需要用不同证据区分。

把这三类分开后,你才能回答“覆盖范围”到底指什么。如果指“已成功解析的页面”,失败清单不算覆盖;如果指“已发现并纳入处理的URL”,失败清单算部分覆盖。这个口径要先定,否则补扫范围会来回变。

一个假设例子:中断在第二层时怎么定补扫边界

假设某站点结构为:首页 → 栏目页(20个)→ 详情页(每栏目约50个)。扫描在解析完首页和8个栏目页后中断,已抓取清单里有首页、8个栏目页和这8个栏目下的部分详情页,队列快照丢失。

此时不能直接说“覆盖了8/20”。可核对的动作是:先确认已抓取的8个栏目页是否全部解析成功,再从这8个栏目页中提取出它们指向的详情页链接,与已抓取清单比对。若比对后发现每个栏目下都有大量详情页未出现,说明中断发生在详情页抓取阶段,补扫应从这些栏目页的链接集合继续;若发现未出现的详情页极少,说明该栏目本身链接就少,覆盖缺口可能集中在剩余12个栏目。

这个例子的关键不是数字,而是动作顺序:先确认入口层是否完整,再判断下一层缺口。入口层不完整时,任何下层覆盖率都不可信。补扫范围应优先补入口层,而不是按已抓取数量比例分配。

补扫前必须确认的例外条件

有两种情况不适合直接补扫,需要先处理再决定范围。

一是站点在中断期间发生了结构变更。如果栏目页URL或链接规则改了,中断前的队列快照和已抓取清单可能对应旧结构,直接续跑会混入失效URL。此时应以当前站点结构重新枚举,而不是复用旧清单。

二是排除规则在中断后被修改。规则变化会让同一批URL的覆盖口径前后不一致:中断前被排除的URL,中断后可能进入队列,反之亦然。这时要固定一份规则版本,用它重新判定已抓取清单和待补扫清单,否则差集没有意义。

最后,覆盖范围确认完成后,把结果落成一份可核对的清单:已成功URL、失败URL、排除URL、未发现URL四类分开记录。这份清单就是后续判断“是否补扫完成”的基准。如果补扫后未发现URL数量没有下降,说明缺口不在抓取环节,而在链接发现或站点结构本身,继续加大抓取范围不会改变结果。

图1 图2

nginx