做蜘蛛池时,大家常把精力花在内容差异、連結结构上,却容易忽略服務器前面那层防護。入口頁做得再規整,如果請求還没到應用层就被拦掉,日誌里只會留下一片 403,後面的工作都無從谈起。
一、三類常见的拦截,表現各不相同
- WAF 規則命中:常见触發点是 UA 黑名單、請求头缺失(比如没有 Accept)、參數里带特殊字符、批量頁面路径高度相似。表現是固定返回 403 或 406,且集中在同一批 IP。
- 速率限制:單 IP 每秒請求數、並發连接數或带宽超阈值後被限流或临时封禁。表現是 429、连接超时,或者前几秒正常、後面開始大面积失敗。
- 地区與網段封鎖:為省资源把某些國家、地区或云机房段整段屏蔽。表現是连接直接不通,工具里看到的是连接重置而不是 HTTP 狀態碼。
二、爬虫的来訪特征,和攻击流量不太一样
搜尋爬虫通常不會長時間压很高的並發,但會持續、稳定地請求大量不同 URL。它的請求头相對完整,UA 會明确标识自己,通過反向解析也能對得上官方網段。真正需要警惕的是:UA 寫着爬虫、IP 却来自普通宽带或代理池,這類請求才算異常。
所以判断思路可以简化為:先看来源 IP 是否属于官方網段,再看訪問行為是否符合抓取节奏,最後才看 UA 字符串。
三、發現問题後的排查顺序
- 在入口頁日誌里筛 403、429 等異常狀態,看是否集中在某個時間段或某一批 IP。
- 把可疑 IP 做反向解析,確認是否属于搜尋爬虫的官方段。
- 临时把该 IP 加入白名單,观察請求能否正常拿到 200 和正文。
- 检查 WAF 與限速規則,是否用整段 CIDR 或泛化 UA 規則把爬虫一並覆盖。
- 確認封鎖策略是否同时作用于静態资源,图片、样式被挡同样會影响頁面评估。
四、让防護和抓取共存的几種做法
- 按 IP 段放行,而不是按 UA 放行。UA 容易伪造,網段不容易。
- 把入口頁所在站点與後台、接口分開配置限速阈值,抓取型頁面给更高的單 IP 配額。
- 對静態资源單獨设策略,避免出現 HTML 能取、图片全 403 的情况。
- 限速触發时優先返回 429 並带上 Retry-After,而不是直接重置连接。
- 如果确實要做地区封鎖,先確認目标搜尋引擎的抓取节点落在哪些区域。
一個常见誤区是:把所有非浏览器 UA 都当成工具流量拦截。结果往往是自己的抓取通道先被切断,而真正需要防的請求仍然能靠伪造 UA 混進来。
五、日誌里要盯的字段
除了狀態碼,建议同时记錄来源 IP、UA、請求路径、响應時間、响應体大小,以及是否命中某條防護規則。有了這些字段,才能区分「頁面本身有問题」和「請求压根没進到應用」。如果同一批入口頁的狀態碼在一段時間内整体從 200 變成 403,優先怀疑防護配置,而不是内容。
入口頁的價值建立在能被正常抓取這個前提上。把防護規則和抓取需求放在一起核對一遍,往往比反复調整頁面模板更直接。