反爬与爬虫:内容站每天都在打的这场仗

admin 互联网 2026-10-30 8 0

先分清三类「非人类访问」,处理方式完全不同:

类型特征该怎么办
搜索引擎UA 明确、遵守 robots、抓取有节奏欢迎,做好 sitemap 引导
采集器UA 伪装、并发高、只抓正文不抓资源限速、拒绝、必要时封段
扫描器请求不存在的路径(wp-admin、.env)直接 404,别回显信息

最容易被忽视的是第二类和第一类长得像——它们都会伪装成浏览器 UA,只看 UA 分不出来。

一、怎么识别采集器

靠行为特征,不靠 UA:

  • 请求比例异常:正常访客会请求 HTML,再请求同页的 CSS/JS/图片。采集器只取 HTML,资源请求几乎是零;
  • 节奏过于规律:固定间隔、没有停顿、深夜不间断;
  • 只走列表页和详情页,从不访问分类翻页、关于页;
  • Referer 为空或始终一致。

这些特征在 nginx 日志里都能统计出来,做一次日志分析就知道自己的站被谁盯着。

二、防护手段的性价比排序

  1. 限速:单 IP 每分钟请求数上限,最便宜也最有效,误伤率低;
  2. robots.txt:对守规矩的爬虫有效,对采集器无效,但成本为零;
  3. 识别并拒绝:按行为特征(资源请求比例、并发数)打标记;
  4. 动态渲染:正文靠 JS 加载,抬高质量门槛,代价是你自己的 SEO 也可能受影响;
  5. 验证码:误伤率最高,只在被持续攻击时用。

注意第四条:动态渲染是双刃剑。搜索引擎能执行 JS,但成本更高,抓取预算有限的小站会因此掉收录。

三、扫描器为什么天天来

你的日志里一定有这些请求:/wp-login.php、/.env、/admin.php、/_ignition/execute-solution。这不是针对你,是自动化工具在扫全网。

应对很简单:不存在就返回 404,不要返回 200 的首页。很多站点配置了「找不到就回首页」,这让扫描器认为路径有效,反而招来更多尝试。

四、别把搜索引擎一起拦掉

最常见的自杀式操作是「看到 UA 里带 bot 就全拦」。Googlebot、Bingbot、Baiduspider、Yandex 都在这个名单里,拦掉的第二天收录就开始掉。

正确做法是白名单优先:先放过已知的搜索引擎 UA 及其 IP 段,再对剩下的做限制。

五、做一个自己的爬虫统计

不用复杂,只要在日志分析里多一列「按 UA 分类」:搜索引擎、浏览器、空 UA、可疑。每周看一次,就能知道:

  • 搜索引擎多久来一次、抓了多少页面(抓取频率是收录速度的直接指标);
  • 有没有新的采集源在盯你;
  • 扫描器的量级有没有突然上升(意味着有人在针对你)。

日志统计怎么做,见 Cookie 退场之后的统计;服务器层面的基础防护,见 数据合规落地。

相关阅读

评论

访问统计