搭蜘蛛池的时候,很多人把精力花在域名、IP、模板這些地方,却很少認真想過一個問题:一個入口頁上,到底该放多少條指向目标頁的連結?放少了,爬虫来了走两步就没路了;放多了,頁面看起来像一份批量導出的清單,爬虫也未必愿意顺着往下点。
没有标准答案,但有可观察的区間
搜尋引擎公開的文档里不會给出“一頁最多多少條連結”這样的數字,因為判断依據從来不是數量本身,而是這個數量在頁面上呈現出来的样子。同样是一百條連結,一個整理得清楚、有分類有說明的頁面,和一個只有裸連結的列表,得到的對待是不一样的。
從實际观察来看,入口頁的出站連結控制在几十條以内,通常更容易让爬虫把頁面處理完;超過這個量級,就要格外留意頁面结构還撑不撑得住。這只是一個起点,不是标准线,真正的依據要回到自己站点的訪問日誌里去找。
两個极端都不好用
太密:一頁堆几百條
把所有目标頁都塞進同一個入口頁,表面上爬虫一次性能看到全部 URL,實际上往往會带来几個副作用:單頁体积變大、渲染變慢,爬虫在有限時間内能處理完的内容變少;頁面主题被打散,連結之間缺少语义關联;一旦其中一部分連結指向低质量頁面,整個入口頁的评價也會被拖下去。
更稳妥的做法是拆:按主题、按時間、按字母顺序,把目标頁分散到多個入口頁上,再用少量連結把入口頁互相串起来,让爬虫有路径可走,而不是把压力集中在一個頁面上。
太稀:一頁只放一两條
另一個极端是為了“看起来自然”而刻意少放,结果爬虫每次来只能多發現一两個 URL,發現效率极低,需要维護的入口頁數量成倍增加。如果入口頁本身還缺少内容支撑,這種頁面同样很难被反复抓取。
位置和上下文,比總數更值得花心思
同一條連結,放在正文段落里、放在侧邊推荐里、放在頁脚列表里,爬虫對待的權重是不一样的。入口頁可以有列表,但尽量別整頁都是列表。
- 正文内的連結:给一句說明,寫清楚点過去能看到什么,連結文字和上下文有實际關系。
- 分類区块:把目标頁按主题分组,每组十條左右,配上小标题。
- 頁脚匯總:可以放全量連結,但要接受它在權重上的劣势,把它当作补充通道,而不是主通道。
判断目前密度合不合适,看三件事
- 爬虫是否真的顺着連結往下走:看目标頁的抓取量占入口頁抓取量的比例,比例長期极低,說明連結没有被有效處理。
- 入口頁本身的抓取频次:如果入口頁都很少被訪問,先解决入口頁可抓取價值的問题,再谈連結數量。
- 目标頁的抓取分布:是相對均匀地散開,還是集中在少數几個連結上。過度集中,通常意味着頁面结构或位置把爬虫的注意力引偏了。
几條可以落地的建议
- 新池子從每頁二三十條連結起步,观察一到两周再决定加還是减。
- 入口頁要有自己的内容,哪怕是简短的分類說明,也別做成纯連結頁。
- 連結數量的調整要小步走,一次翻倍或者砍半,日誌上很难分清到底是谁的影响。
- 把連結數量、頁面体积、抓取结果放在同一張表里對照着看,比只盯着某一個數字有用得多。
入口頁的連結數量只是手段,真正要回答的問题是:爬虫来一次,能不能顺顺利利地把该發現的 URL 都發現掉,並且愿意下次再来。