抓取预算不是一个抽象词
很多人在做蜘蛛池入口页时,把注意力全放在正文和链接上,忽略了页面里那些顺手带上的资源。爬虫拿到一个 HTML 之后,并不只看正文,它还会解析页面引用的 CSS、JavaScript、图片、字体、图标等外部资源。对搜索引擎来说,这些请求同样要排队、要分配带宽、要占用主机资源,也就是常说的抓取预算。
入口页的价值是被发现。如果一页的抓取额度被大量无关资源吃掉,真正承载链接的那部分反而可能被延后处理。
一个入口页会带出多少请求
一个看似只有几十行 HTML 的页面,实际产生的请求往往远超预期:
- 框架或模板自带的 CSS、JS,通常是几个到十几个文件;
- 图标字体、字体文件,单个文件动辄上百 KB;
- 统计代码、客服脚本、广告位脚本,每个都指向一个外部域名;
- 页面里的图片、占位图、背景图;
- 模板残留的 favicon、manifest、预加载链接。
这些请求里,有一部分会被爬虫的渲染流程执行,有一部分只被记录。无论哪一种,都会在日志里留下痕迹,也会占用服务器连接数。
哪些请求值得留,哪些可以砍
判断标准很简单:这个资源是否影响爬虫理解页面的主要内容。
- 值得留:必要的样式(避免页面错乱到无法阅读)、承载主要内容的图片、与页面主题直接相关的 JS。
- 可以砍:统计与埋点脚本、客服与弹窗组件、装饰性背景图、与本页无关的推荐模块脚本。
- 必须处理:指向已经失效外部域名的资源,它们会产生超时和错误状态,白白消耗时间。
入口页的设计目标是让爬虫尽快拿到链接和主题信息,不是复刻一个功能完整的商业页面。
把资源收敛到可控范围
- 先看日志,统计每个入口页平均产生多少条资源请求,找出请求数最多的那几个模板。
- 把公共样式内联到 HTML 的 style 里,减少一次外部请求;能用纯 HTML 表达的结构就别用 JS 渲染。
- 图片压缩到合理尺寸,不需要高清;能用文字或色块替代的地方就用替代方案。
- 移除第三方脚本,尤其是统计、广告和客服类,它们在入口页上几乎带不来收益。
- 定期检查资源域名是否还活着,避免出现一批长期超时的外链资源。
别忽略服务器侧的承受能力
资源请求不只影响爬虫,也影响你自己的机器。一个入口页从 3 个请求变成 20 个请求,再乘以入口页数量,就是连接数和带宽的成倍增长。在入口页规模较大时,这种放大效应往往比内容本身更早把服务器压到限流。
另外,如果资源放在 CDN 或第三方域名上,爬虫实际拿到的那份页面还取决于这些资源的可用性。缓存未命中、回源失败、跨域限制,都会让页面在爬虫眼里呈现得不完整。这部分需要单独观察日志,而不是想当然地认为页面已经完整加载。
一个简单的自查清单
- 入口页的 HTML 体积是否在合理范围,是否夹带了模板遗留代码;
- 是否有外部脚本、字体、统计在拖慢首屏;
- 图片是否压缩过,是否存在无意义的装饰图;
- 资源域名是否稳定,是否出现过批量超时;
- 资源请求数量是否随入口页数量线性放大,服务器能否承接。
把这些做到位,入口页对抓取预算的消耗会明显可控,爬虫也更容易把注意力放在链接和内容本身。至于最终能带来多少 URL 发现,仍然取决于链接结构、内容质量和整站运营,不是单靠削减资源请求就能决定的。