搜尋抓取

怎么確認来訪的是真搜尋蜘蛛:UA、反向 DNS 與 IP 段的核對顺序

站点日誌里自称搜尋蜘蛛的請求並不都可信。本文给出可执行的核對顺序:先用官方 IP 段筛一遍,再做反向 DNS 與正向解析互相印證,最後才看 UA;並区分真蜘蛛與伪装爬虫的不同處理方式,减少誤拦真蜘蛛、誤放伪装爬虫,兼顾抓取與服務器稳定性。

搜尋抓取

怎么確認来訪的是真搜尋蜘蛛:UA、反向 DNS 與 IP 段的核對顺序

站点日誌里突然多出一批“搜尋蜘蛛”的訪問,先別急着在 robots.txt 里放行或封禁,需要先回答一個更基础的問题:来的是不是真的搜尋蜘蛛。UA 字符串可以随手伪造,不少采集程序、监控工具、甚至一些蜘蛛池服務都會把 UA 寫成 Googlebot 或 Bingbot。只看 UA 做判断,很容易一邊把真蜘蛛挡在外面,一邊给假蜘蛛開了绿灯。

只看 UA 會踩的两個坑

第一個坑是誤伤。把 UA 里带 bot 的請求一律拦截,可能顺手拦掉真蜘蛛的部分 IP,随後出現抓取量下降、缓存内容變舊。第二個坑是誤放。把寫着 Googlebot 的請求全部当成真蜘蛛,等于给任意来源的爬虫開了後门,它們可以顶着這個身份高频抓取,服務器负载被悄悄吃掉。

几個比較典型的可疑信号:

  • UA 寫着主流搜尋引擎,但来源 IP 不在该引擎公布的網段里。
  • 請求频率遠高于日誌里真蜘蛛的常態,且集中在少數接口或列表頁。
  • 只抓带參數的 URL,或只抓某個目錄,不請求 robots.txt 與常见静態资源。
  • 反向 DNS 查不到记錄,或主机名與该搜尋引擎的官方域名後缀無關。

核對顺序:先 IP,再反向 DNS,最後正向解析

判断身份的顺序不能倒過来。UA 放在最後看,前面两步才是硬證據。

  1. 比對 IP 網段。主流搜尋引擎都會公布自己的爬虫 IP 段或 JSON 列表,把日誌里的来源 IP 和這份名單對照,不在名單里的先归為待核實。
  2. 做反向 DNS 查询。對 IP 反查得到主机名,再看主机名是否以官方域名结尾,例如以 googlebot.com、search.msn.com 這類後缀收尾。名字看起来像還不够,後缀必须對得上。
  3. 做正向解析回查。拿上一步得到的主机名再解析一次,確認返回的 IP 與最初记錄的 IP 是同一個。只有這一步也對上,反向 DNS 才真正可信。
  4. 定期更新名單。IP 段會變,把比對規則做成定期拉取,比手工维護一份静態清單可靠。
反向 DNS 與正向解析互相印證,才算比較硬的證據;只對得上 UA,不构成判断依據。

驗明身份之後:真蜘蛛放行,假蜘蛛按普通訪客處理

對真蜘蛛

真蜘蛛要的不是特殊照顾,而是稳定和可预期:响應時間別忽高忽低,別让 WAF、驗證碼、Cookie 同意彈窗挡在抓取路径上,需要渲染的頁面要保證 CSS、JS 可訪問。如果站点压力确實大,優先在站長平台調整抓取速率,而不是直接在服務器上返回 403 或 429,後者可能让蜘蛛在之後一段時間里降低對整站的抓取。

對假蜘蛛

假蜘蛛不必單獨设計策略,按普通訪客的規則處理即可:按 IP 與路径限速,對異常高频的 UA 加 IP 组合做临时封禁,必要时上驗證。要注意的是,不要因為某個 UA 被滥用過就全局拉黑這個 UA,真蜘蛛也會用同样的字符串。

限流要落在具体的维度上

服務器稳定性直接影响抓取,但限流不能一刀切。按 IP 限並發、按路径限频率、按连接數设上限,比按 UA 全站拦截更精准。观察几個指标:單 IP 的並發连接數、單位時間請求數、5xx 比例、平均响應時間。真蜘蛛的高频通常伴随正常的路径分布;伪装的爬虫往往集中在少數 URL 上,這两個特征比 UA 更能說明問题。

日誌里至少要留下這几列

  • 来源 IP 與完整 UA 字符串。
  • 請求路径、狀態碼、响應時間、返回字节數。
  • Referer 與請求方法,便于识別非正常抓取。
  • 保留足够的日誌周期,覆盖蜘蛛一轮抓取的間隔。

把身份核對做成固定動作之後,再谈 robots.txt、Sitemap 和抓取速率才有意义。否則一套针對“蜘蛛”的策略,可能作用在了一批並不是蜘蛛的請求上。