做蜘蛛池时,大多數人把注意力放在連結结构、入口頁數量和更新频率上,較少有人關心一個更基础的問题:單個入口頁到底有多重。爬虫抓一個頁面能調用的资源是有限的,頁面越重,同样的抓取预算能覆盖的 URL 就越少。
爬虫為一個頁面付出什么
简化看,一次抓取包含几段成本:建立连接、等待首字节、下载 HTML、解析 DOM。如果 HTML 里還引用了外部 CSS、JS、字体和图片,爬虫是否繼續去取這些资源取决于它自己的調度策略,但前提是它得先把 HTML 拿到手。
所以体积問题的核心不是頁面好不好看,而是這一跳值不值。入口頁的职责通常很简單——把爬虫引向下一跳,它不需要承载一個完整站点的复杂度。
值得盯的几個數字
- 首字节時間:服務端處理加上網絡往返。入口頁如果是静態文件,一般在几百毫秒内返回,超過一秒就值得查一查。
- HTML 传輸大小:看压缩後的大小,不是源文件大小。開了 gzip 或 brotli 之後仍然超過一两百 KB,通常說明内联内容或 DOM 太臃肿。
- DOM 节点數量:几千個节点和几萬個节点,解析開销不在一個量級。
- 外鏈资源數量:一個入口頁挂十几個 JS 和字体文件,對爬虫和真實用戶都是负担。
入口頁要不要加载 CSS、JS、图片
入口頁多數是過渡頁或聚合頁,内容以文字連結為主,這類頁面完全可以用轻模板:關键样式内联、必要的脚本极少、图片能不用就不用。
如果确實需要图片,用普通的 img 标簽並寫明宽高,避免用 CSS 背景图承载關键内容,也避免把图片直接轉成 base64 塞進 HTML——那會让每次抓取都重新下载一遍同样的字节。
几個常见誤区
- 入口頁复用主站模板。主站首頁往往带着導航、推荐位、統計脚本、客服组件,套到入口頁上,体积會被放大好几倍。
- 統計與广告脚本随手加。這些脚本對爬虫没有價值,却會增加解析和請求。
- 压缩没真正生效。源站開了压缩,但 CDN 回源後没有透传,實际返回的還是未压缩内容,這在接入了多层缓存时很常见。
- 把体积当成排名因素。体积影响的是抓取效率和用戶体驗,不是直接的排序信号,不必為了压到极致而牺牲可讀性。
落地时可以這么做
- 给入口頁單獨一套模板,與主站样式解耦。
- 關键 CSS 内联,其余样式表按需加载或直接省略。
- 去掉與跳轉無關的脚本,尤其是埋点、聊天窗口、A/B 測試工具。
- 检查压缩鏈路:源站、CDN、反向代理三處都要確認返回头里带了压缩标识。
- 把 HTML 传輸大小和首字节時間纳入日常监控,出現明顯上涨时先排查模板改動。
入口頁做得轻,並不會自動带来收錄。它更像是把通道拓宽一点:同样的抓取资源,能多走几個 URL,少在传輸和解析上浪費。是否值得優化,取决于入口頁的規模——只有几十個頁面时收益有限;上千個頁面时,每頁省下的几十 KB 會累积成可观的抓取余量。