反爬与爬虫:内容站每天都在打的这场仗
先分清三类「非人类访问」,处理方式完全不同:
| 类型 | 特征 | 该怎么办 |
|---|---|---|
| 搜索引擎 | UA 明确、遵守 robots、抓取有节奏 | 欢迎,做好 sitemap 引导 |
| 采集器 | UA 伪装、并发高、只抓正文不抓资源 | 限速、拒绝、必要时封段 |
| 扫描器 | 请求不存在的路径(wp-admin、.env) | 直接 404,别回显信息 |
最容易被忽视的是第二类和第一类长得像——它们都会伪装成浏览器 UA,只看 UA 分不出来。
一、怎么识别采集器
靠行为特征,不靠 UA:
- 请求比例异常:正常访客会请求 HTML,再请求同页的 CSS/JS/图片。采集器只取 HTML,资源请求几乎是零;
- 节奏过于规律:固定间隔、没有停顿、深夜不间断;
- 只走列表页和详情页,从不访问分类翻页、关于页;
- Referer 为空或始终一致。
这些特征在 nginx 日志里都能统计出来,做一次日志分析就知道自己的站被谁盯着。
二、防护手段的性价比排序
- 限速:单 IP 每分钟请求数上限,最便宜也最有效,误伤率低;
- robots.txt:对守规矩的爬虫有效,对采集器无效,但成本为零;
- 识别并拒绝:按行为特征(资源请求比例、并发数)打标记;
- 动态渲染:正文靠 JS 加载,抬高质量门槛,代价是你自己的 SEO 也可能受影响;
- 验证码:误伤率最高,只在被持续攻击时用。
注意第四条:动态渲染是双刃剑。搜索引擎能执行 JS,但成本更高,抓取预算有限的小站会因此掉收录。
三、扫描器为什么天天来
你的日志里一定有这些请求:/wp-login.php、/.env、/admin.php、/_ignition/execute-solution。这不是针对你,是自动化工具在扫全网。
应对很简单:不存在就返回 404,不要返回 200 的首页。很多站点配置了「找不到就回首页」,这让扫描器认为路径有效,反而招来更多尝试。
四、别把搜索引擎一起拦掉
最常见的自杀式操作是「看到 UA 里带 bot 就全拦」。Googlebot、Bingbot、Baiduspider、Yandex 都在这个名单里,拦掉的第二天收录就开始掉。
正确做法是白名单优先:先放过已知的搜索引擎 UA 及其 IP 段,再对剩下的做限制。
五、做一个自己的爬虫统计
不用复杂,只要在日志分析里多一列「按 UA 分类」:搜索引擎、浏览器、空 UA、可疑。每周看一次,就能知道:
- 搜索引擎多久来一次、抓了多少页面(抓取频率是收录速度的直接指标);
- 有没有新的采集源在盯你;
- 扫描器的量级有没有突然上升(意味着有人在针对你)。
日志统计怎么做,见 Cookie 退场之后的统计;服务器层面的基础防护,见 数据合规落地。
相关阅读
版权声明:如无特殊标注,文章均为本站原创,转载时请以链接形式注明文章出处。






评论