做蜘蛛池时,大多数人把注意力放在链接结构、入口页数量和更新频率上,较少有人关心一个更基础的问题:单个入口页到底有多重。爬虫抓一个页面能调用的资源是有限的,页面越重,同样的抓取预算能覆盖的 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 会累积成可观的抓取余量。