聊抓取效率时,大家习惯先數 URL:站点有多少頁面、多少分頁、多少篩選组合。但同样是一千個 URL,蜘蛛抓完所需的時間可能相差很大,其中一個變量就是單個頁面自身有多重。URL 數量决定要走多少步,頁面体积和结构决定每一步走得多快。
蜘蛛拿到的是原始 HTML,不是渲染後的画面
多數情况下,蜘蛛先從服務器取回 HTML 源碼,再從里面解析正文和連結。它能看到的,基本就是你查看網頁源代碼时看到的那一份。如果連結是脚本执行後才插入 DOM 的,正文要靠接口返回再填充,那么“浏览器里很好看”並不等于“蜘蛛讀得到”。
所以判断一個頁面的抓取成本,第一步不是打開浏览器看效果,而是直接看源碼:正文在不在、連結在不在、大小是多少。
HTML 体积:每個請求都要重新付出代價
- 一張内联成 base64 的大图,能把 HTML 撑大几百 KB,而蜘蛛並不需要這份資料;
- 整站共用的大段内联样式、内联脚本、模板注释,會反复出現在每個頁面上;
- 把完整商品列表、全部评论、推荐位一股脑塞進首屏 HTML,會让正文占比變得很低。
体积大的直接後果是下载耗时更長、解析更慢,同一時間段内能抓完的 URL 更少。間接後果是有效信息被稀释,蜘蛛判断頁面主题、判断連結價值时更費劲。常见做法是压缩模板、把重复结构抽成外鏈资源、大块資料按需加载或分頁展示。
DOM 深度與連結位置:藏在第十层的連結容易被忽略
連結埋在多少层嵌套容器里,會影响蜘蛛發現它的效率。典型的問题结构是:為了视觉排版,把導航、相關推荐、分類入口层层包進容器,最後連結出現在 DOM 很深的位置。蜘蛛仍然可能抓到,但這類連結在整頁里的可见度和传递效果都會下降。
更實际的做法是让重要連結靠近頁面顶部、靠近正文,减少不必要的包裹层:主導航直接可点,面包屑放在主内容上方,正文里自然出現指向相關内容的連結。列表頁的下一頁、詳情頁的上一級,尽量用普通 a 标簽而不是点击事件。
頁面變重,抓取节奏也會跟着變
在有限的抓取配額下,蜘蛛在每個頁面上花的時間越長,能訪問的頁面就越少。頁面普遍偏重、响應偏慢时,站点更容易出現請求排队、超时,甚至让對方降低抓取频率。這部分是站点自己可以控制的:開啟 gzip 或 brotli 压缩、图片按展示尺寸裁剪、给静態资源設定合理缓存、用 CDN 承接静態請求,都能减轻單個請求的负担。
上手检查的几件事
- 關掉脚本或直接看源碼,確認正文和主要連結都出現在原始 HTML 里;
- 統計几個代表性頁面的 HTML 大小,找出異常臃肿的模板;
- 抽查重要連結的嵌套层級,把入口区、正文区、頁脚区分開看;
- 確認首屏内容顺序:正文是否靠前,導航和頁脚是否靠後;
- 確認压缩、缓存、CDN 是否覆盖到 HTML 本身,而不只是图片和 JS。
頁面變轻不是為了讨好谁,而是让每一次抓取都落在内容上。结构清楚、体积克制的頁面,被讀懂和被繼續訪問的概率通常更高;但具体表現仍取决于站点整体质量和搜尋引擎的判断,没有哪種做法能保證结果。