搜尋抓取

蜘蛛渲染頁面时要拉多少资源:CSS、JS、图片被挡住之後

蜘蛛抓取分两段,第二段渲染要單獨請求 CSS、JS、图片等资源。本文說明這些资源被 robots.txt、WAF 或懒加载挡住之後,蜘蛛看到的頁面會缺什么,並给出關閉 JS 自查、日誌核查與资源体积控制的排查顺序。

搜尋抓取

蜘蛛渲染頁面时要拉多少资源:CSS、JS、图片被挡住之後

蜘蛛抓一個頁面通常分两段:先把 HTML 源碼拿回去,再把頁面放進渲染队列,执行脚本、加载样式和图片。第一段只要服務器正常返回,内容基本就到手了;第二段能還原出什么,取决于這些渲染资源允不允许被抓。

渲染资源本身也是抓取對象

很多站点只盯着 HTML,忽略了 CSS、JS、图片、字体同样是蜘蛛要發起的獨立請求。它們被挡住时,後果並不一样:

  • CSS 被屏蔽:頁面结构還在,但布局信息缺失,判断某段内容是不是正文、是不是隐藏元素會變难,抽取结果的准确度下降。
  • JS 被屏蔽:依赖脚本插入的正文、列表、導航可能整块消失,蜘蛛看到的是一張空壳頁面。
  • 图片被屏蔽:文字内容一般不受影响,但頁面完整性受损,图片搜尋的收錄机會也基本没了。
  • 字体、图标被屏蔽:影响較小,但若因此引發大量 403,日誌里會混進不少噪音。

三類常见誤伤

問题往往不是有意屏蔽,而是配置顺手带出来的。

robots.txt 的通配寫法

比如 Disallow: /assets/、Disallow: /*.js$、Disallow: /static/,本意是挡掉後台或临时文件,结果把整站样式和脚本一起挡了。寫完規則後,把關键资源路径逐條對着規則走一遍,比事後排查省事得多。

WAF 與 CDN 的静態资源校驗

有些防護策略只對静態资源做频率或 UA 校驗,正常用戶訪問没事,蜘蛛密集請求时却被 403。還有一種情况是防盗鏈:图片校驗 Referer,蜘蛛請求不带来源,直接拿不到。日誌里通常表現為同一批静態资源反复报错。

懒加载與滚動触發

用 data-src 存放真實地址、再靠脚本替換,或者列表只在滚動到底部时才請求下一頁,這些做法在浏览器里体驗不错,但蜘蛛未必會滚動、未必會等。首屏内容尽量直接寫在 HTML 里,後續内容用可点击的分頁連結承载,比押注脚本更稳。

自查顺序

  1. 關掉 JS 打開頁面,看還剩多少可见内容,能對上就說明主要内容不依赖脚本。
  2. 抓取几個代表頁,检查静態资源的返回碼,重点看 403、404 和超时。
  3. 翻服務器日誌,看静態资源的抓取量是否異常接近零。正常站点這部分請求量通常遠大于 HTML。
  4. 移動端和桌面端各看一遍,两套 UA 對應的资源加载策略有时並不一致。
渲染资源的請求數量通常遠超 HTML 本身,但它真正的價值不在數量,而在于它决定了蜘蛛最终看到的是一個完整頁面,還是一張空壳。

把资源体积也纳入考虑

体积越大,單次渲染耗时越長,單位時間里能處理完的頁面就越少。合並零碎的小文件、開啟压缩、把非關键脚本延後加载,都是常規做法。但要注意別把關键样式也延迟到脚本执行之後,那等于人為制造一次渲染失敗。资源優化和抓取效率是同一件事的两面,不必分開看。