做蜘蛛池的人常碰到一个现象:入口页铺了几十个,日志里蜘蛛确实来过,但翻来覆去只抓其中两三个,其余页面像没被看见一样。除了链接权重和抓取预算,还有一个容易被忽略的原因——这些入口页在蜘蛛眼里几乎是同一张脸。
蜘蛛怎么判断两个页面“长得一样”
抓取和索引流程里通常有一段去重处理。它不是逐字比对整篇 HTML,而是先做模板剥离:把导航、页脚、侧边栏这些在所有页面都出现的部分识别为样板内容,再对剩下的主体做指纹计算。常见做法包括分句哈希、重叠片段的相似度计算、SimHash 之类的近似匹配。如果两个页面的主体指纹高度接近,系统会把它们归进同一个簇。
归簇之后会发生什么,取决于簇内页面的质量和差异:
- 只保留少数代表页继续参与后续处理,其余被折叠;
- 抓取调度上,同一簇的页面优先级下降,蜘蛛来得越来越少;
- 日志上表现为“来过一次就再没出现”,或者只抓列表页不抓后面的内容页。
入口页重复的几种常见来源
- 同一套模板套不同关键词:标题换了,正文只有一两句话不同,其余完全一致。
- 采集后只做同义词替换:句子结构、段落顺序、标点位置几乎不变,近似匹配很容易命中。
- 链接列表页高度雷同:页面主体就是一堆链接,内容区没有实质文字。
- 参数不同内容相同:同一个页面用不同参数生成多份,正文一模一样。
重复会带来什么实际影响
最直接的是抓取预算被浪费。蜘蛛在多个高度相似的页面之间来回切换,能带走的有效信息却很少。其次是入口页很难作为独立页面被处理,它作为“链接中转站”的作用也会打折——如果中转页本身都没被好好抓取,后面的目标页自然更难被发现。
判断重复度不要靠肉眼扫一遍标题。抽十几个页面,把公共的头部、页脚、侧栏去掉,只看剩下的正文部分。如果去掉之后每页只剩几十个字,那基本就是模板在撑着页面。
降低重复度的可行做法
让正文有真实的差异
不是换词,而是换信息。同一主题下可以分别从不同角度切入:一个页面讲使用步骤,一个页面讲常见错误,一个页面讲与其他方案的对比。每页至少有一段是这页独有的、别处抄不走的文字。
控制模板的固定部分
导航、页脚这些必须存在的元素尽量精简。固定区块占比越低,主体内容的差异就越容易被识别出来。也不要把大量关键词堆在页脚或侧栏,那部分很可能在去重阶段就被剥掉了。
数量与差异度要一起考虑
铺得越多,单页可投入的差异化精力就越少,重复度自然上升。与其铺一百个几乎一样的入口,不如先做二三十个各有侧重、维护得过来的入口,观察日志再决定是否扩量。
定期抽查,而不是定期新增
每隔一段时间从现有入口里随机抽一批,按上面的方法去掉模板后对比正文。发现某个批次高度雷同,优先处理这个批次,而不是继续加新页。
几个提醒
- 去重是近似判断,不是精确比对,所以“改了几个词”通常没用,“换了一段结构”才可能有差别。
- 链接列表型入口页如果长期只有链接,可以补一小段说明文字,让页面有主体内容。
- 不要为了降低重复度去堆无意义的随机文字,那会让页面质量更差,对抓取没有帮助。
- 入口页的存活率、可访问性和内容差异度是同时起作用的,单看一项都判断不准。
把入口页当成需要长期维护的页面,而不是一次性的链接容器,重复度问题往往会在日志里先暴露出来——前提是你愿意去比对,而不只是看蜘蛛来过几次。