爬虫日志分析:参数组合无限增长时怎样定义有效地址集合

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

爬虫日志分析:参数组合无限增长时怎样定义有效地址集合

当目录页的筛选参数、排序参数和分页参数任意组合时,日志里出现的 URL 数量会随抓取次数持续膨胀,但其中真正值得被收录的地址只是很小一部分。缺少完整日志或权限时,你仍然可以先做一件事:把日志中的 URL 按“路径 + 参数名集合”归并,统计每个参数名集合的出现频次与被抓取次数,再据此划出有效地址集合的候选边界。这个动作只能说明哪些参数组合被反复抓取,不能证明它们已被索引,也不能证明未出现的组合一定不被抓取。

先把无限参数拆成“路径模板 + 参数名集合”

不要逐条看 URL。取任意一份可用的日志片段或页面链接清单,对每条记录只保留三样东西:路径部分、参数名(不含取值)、抓取次数。例如 /list?color=red&sort=price&page=2 归并为路径 /list、参数名集合 {color, sort, page}。归并后你会得到一张频次表,参数取值的数量不再影响行数。

这一步的实际作用是让“无限”变成有限。参数名通常只有几个,组合数因此可控。做完之后,下一步不再是判断某条 URL 有没有用,而是判断某个参数名集合有没有用。

用抓取频次区分三类参数名集合

频次表出来之后,按抓取次数把参数名集合分成三档,每档对应不同的处理方向:

分档的依据是抓取次数与路径数量的关系,不是某个固定阈值。假设某站点日志中 {page} 在 8 个路径上共被抓 400 次,而 {color, size, sort, page} 在 300 个路径上共被抓 350 次。前者平均每路径 50 次,后者平均每路径约 1.2 次。这个对比只是说明假设的比较方法:平均抓取次数低,意味着该参数组合更可能是被链接带出来的,而不是被单独对待的。它不能直接推出“前者会被收录、后者不会被收录”,因为抓取与索引是两件事。

缺少完整日志时,最小可执行动作是什么

没有服务器日志权限时,退一步用页面上的可抓取链接做同样的归并。抓取一个列表页的 HTML,抽出其中的站内链接,按路径和参数名集合归并。这个动作的结果是“当前页面暴露了哪些参数组合”,而不是“搜索引擎抓取了哪些”。两者不能互相替代,但足以让你先圈定需要进一步核对的候选集合。

如果连页面 HTML 都拿不到,只剩一份导出链接或第三方工具给出的 URL 列表,仍然可以做归并,只是频次维度缺失。此时改用“出现次数”代替“抓取次数”,并明确标注这是链接暴露频率,不是抓取频率。后续所有结论都要保留这个前提。

定义有效地址集合时,把“不做什么”写进去

有效地址集合的价值一半来自纳入什么,一半来自排除什么。排除项要写成可执行的动作,并说明动作之后看什么:

  1. 对高频且路径集中的参数名集合,保留其路径模板,作为有效地址集合的骨架。
  2. 对高频但路径发散的参数名集合,先在 robots.txt 中限制对应路径模式。这一步只限制抓取,不等于索引移除;已收录的地址仍可能出现在结果中,需要另行处理。
  3. 对低频集合,暂不处理,但把它记入观察名单。下一次日志归并时看它是否升档,再决定是否纳入。

执行第 2 步之后,下一步不是等排名变化,而是重新做一次归并,看该类参数名集合的抓取次数是否下降。下降只能说明抓取行为改变,不能单独证明处理正确,也不能证明这些地址已从索引中消失。抓取归零的合理解释还包括:入口链接被移除、日志采样范围变化、抓取预算被转移到其他路径。要区分这些原因,需要对照链接清单和路径模板的变化,而不是只看一个数字。

站点地图与索引状态不能用来反推有效集合

把站点地图当作有效地址集合的替代品会出问题。站点地图不保证收录,它表达的是提交意愿,不是抓取或索引结果。同样,HTTPS 不保证安全无漏洞或排名,不能作为筛选有效地址的条件。判断某个参数组合是否已进入索引,只能对具体 URL 做定向核查;不同搜索引擎的支持情况和处理方式需要分别核查,不能由一次观察推及全部。

把上述步骤连起来就是:归并出参数名集合,按抓取频次分档,对发散档做抓取限制,再重新归并验证抓取变化,同时把索引状态作为独立问题单独核查。这个流程在缺少完整数据时仍然可执行,但它给出的是候选边界,不是收录结论。

图1 图2

nginx