做站点运营,防爬是必要动作:采集器、恶意扫描、垃圾流量每天都在敲门。但防爬规则一旦写得过粗,很容易把搜索引擎的正常抓取一起挡掉。典型表现是页面本身没毛病,抓取量却连着几天偏低,翻日志才发现蜘蛛来过,被 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 短时间内请求大量重复参数地址。这样既能保证正常抓取顺畅,也不会让防爬体系出现一个明显的口子。
最后提醒一句,抓取量波动的原因很多,防爬误伤只是其中一种。发现异常时,先用日志和状态码把范围缩小,再决定要不要动规则,比凭感觉调整要稳妥得多。