做站点运营,防爬是必要動作:采集器、恶意掃描、垃圾流量每天都在敲门。但防爬規則一旦寫得過粗,很容易把搜尋引擎的正常抓取一起挡掉。典型表現是頁面本身没毛病,抓取量却连着几天偏低,翻日誌才發現蜘蛛来過,被 403、429 或驗證碼挡了回去。
先分清该拦的和不该拦的
防爬的目标是異常流量,不是所有自動化請求。判断时可以看两個维度:
- 是否為已驗證的搜尋引擎爬虫,包括 UA 声明和来源 IP 是否對得上官方公布的信息。
- 請求行為是否異常,例如短時間高频掃描、批量试探參數、只抓接口不抓頁面。
只凭 UA 里有 bot 就拦,是最常见的誤判起点。
几個常见的誤伤场景
UA 關鍵詞一刀切
有些規則會把包含 bot、spider、crawler 的 UA 全部加入黑名單,或者直接屏蔽空 UA 的請求。這两類做法都會连带挡住正常爬虫,尤其是移動端渲染时發出的請求经常不带完整 UA。
频率限流過紧
為了防止單 IP 高频訪問,有的站点把阈值设得很低,比如每分钟几十次就返回 429。對普通訪客够用,但蜘蛛抓列表頁时並發略高,就容易被反复拦截。如果确實要限流,至少確認响應头里带上重试提示,而不是直接返回一個不明确的错誤。
IP 封禁與云防護挑战
WAF 或 CDN 的自動防護有时會把频繁訪問的 IP 临时拉黑,或彈出人机校驗。蜘蛛遇到校驗頁,通常只會记下一次失敗尝试,不會去点驗證。這類拦截往往在後台看不到明顯告警,只能靠日誌比對發現。
区域或網絡段封鎖
如果按地区屏蔽訪問,需要確認屏蔽范围里没有爬虫常用的出口节点。海外节点、云服務器網段的封鎖,很容易造成某個地区長期抓取不到。
一份可落地的自查清單
- 拉取近 7 到 30 天的訪問日誌,篩選狀態碼為 403、406、429、503 的记錄,看 UA 和来源 IP 分布。
- 把可疑记錄里的 IP 與搜尋引擎官方公布的爬虫 IP 段做比對,必要时做反向 DNS 解析驗證。
- 逐條检查 WAF、限流、驗證碼、防盗鏈規則,問一句:這條規則會不會命中正常抓取。
- 检查 robots.txt 與服務器层規則是否冲突,避免一邊说可以抓,一邊在網關拦掉。
- 找几個结构化資料或图片资源地址單獨测一遍,這些路径经常被漏放行。
- 改完規則後观察一到两周的抓取量、狀態碼比例和頁面抓取深度,別只看一天的資料。
規則放宽的前提是能说清放宽了哪一條、影响范围有多大。宁可先在小范围路径上试,也不要一次性關掉整套防護。
放行之後要做的收尾
放行不等于放開不管。建议把驗證過的爬虫来源整理成單獨的白名單,和普通訪客流量分開統計;同时保留對異常行為的监控,比如單 IP 短時間内請求大量重复參數地址。這样既能保證正常抓取顺畅,也不會让防爬体系出現一個明顯的口子。
最後提醒一句,抓取量波動的原因很多,防爬誤伤只是其中一種。發現異常时,先用日誌和狀態碼把范围缩小,再决定要不要動規則,比凭感觉調整要稳妥得多。