我为我那拥有 150 万个页面的网站对抗爬虫的一年经历

我为我那拥有 150 万个页面的网站对抗爬虫的一年经历

Hacker News 摘要

原标题:A year of fighting scrapers on my 1.5 million-page website

这篇文章由 PatronView 的开发者编写,详细记录了他为一个拥有 150 万个页面的慈善捐赠者数据库网站对抗爬虫的一年经历。

网站流量现状

作者发现他网站 99% 的流量都来自机器人。根据一周的数据统计,服务器处理了 250 万个请求并加载了 128 万个完整页面,但实际的访客统计工具只记录到了 5977 次页面浏览。这意味着每 1 个真实人类访问,就会伴随 214 个机器人页面加载。

由于大多数机器人不运行 JavaScript,因此像 Google Analytics 或 Plausible 这样的统计工具通常无法察觉这些流量。如果只看统计工具的图表,网站看起来每天只有 500 名访客,但服务器实际上正承受着数百万次的冲击。

各种爬虫的攻击手段

网站在不同阶段遭遇了不同类型的爬虫:

• 搜索引擎优化爬虫:包括 SemrushBot、AhrefsBot 和 MJ12bot 等,它们反复爬取网站的每一个页面。

• 来自中国的流量洪峰:2026 年 4 月 22 日,网站在一天内收到了来自中国 36 万个不同 IP 地址的 362 万次请求。作者随后封锁了来自中国和越南的全部流量。

• 人工智能搜索爬虫:

• Anthropic 的 Claude:爬取页面与引流用户的比例为 35000 比 1。这意味着它读取了三万多页才向网站发送一名访客。

• 亚马逊的 Amzn-SearchBot:每天读取 11.7 万个页面,但从未给网站带来任何访客。

• 住宅 IP 僵尸网络:这种爬虫通过数千个普通的家庭宽带连接进行转发,看起来像是真实的普通用户。

防御策略的尝试与失败

作者尝试了多种防御方法,并总结了其中的利弊:

• Cloudflare 的 JavaScript 检测:虽然能拦截部分机器人,但该脚本会使页面加载时间增加近 3 秒,严重拖慢移动端的访问速度。作者关闭该功能后,网站性能得分从 58 分飙升至 99 分。

• 封锁数据中心:真实用户通常使用宽带或移动网络,很少从 AWS 或微软 Azure 等数据中心访问。作者对来自这些数据中心的请求设置了强制验证。

• 封锁旧版本浏览器:僵尸网络往往固定使用某些旧版本的 Chrome 浏览器。作者对这类陈旧的浏览器版本设置了验证码。

目前生效的防御规则

作者目前在 Cloudflare 上运行的防御方案包括:

1. 封锁特定地区:直接屏蔽来自中国和越南的请求。

2. 根据 User-Agent 封锁:屏蔽 12 种已知的搜索引擎优化爬虫。

3. 封锁 AI 爬虫:屏蔽那些只抓取不引流的 AI 搜索爬虫,如 Claude-SearchBot 和 Amzn-SearchBot。

4. 跳过已验证的机器人:确保 Google、必应等有益的搜索引擎机器人不会被拦截。

5. 针对非北美地区的验证:对北美以外的所有访问发起不可见的验证码。

6. 针对数据中心和空 User-Agent 的验证:对来自云服务商或未标识身份的请求进行验证。

7. 速率限制:单个 IP 每 10 秒内请求页面不得超过 30 次。

这些规则的效果非常显著。在最近的 48 小时内,Cloudflare 发出了超过 10 万次验证挑战,只有 252 次被成功解决,解决率仅为 0.24%,证明了绝大多数请求确实是机器人。

对抗成本与结论

机器人的存在导致了多项隐形成本。首先,服务器账单在攻击严重时会激增 5 倍。其次,由于机器人流量混杂,作者无法信任访客统计数据,导致难以判断真实用户的需求。此外,大规模爬取还会造成服务器响应超时,影响真实用户的体验。

作者认为,由于爬取的成本越来越低,这种对抗就像在玩打地鼠游戏。他提出的核心原则是:如果一个爬虫从未给网站带来过访问流量,那么就应该封锁它。他希望未来能出现一种按抓取次数付费的市场机制,让爬虫为消耗的资源支付公平的费用。


原文:https://patronview.com/news/99-percent-of-my-website-traffic-is-bots/

评论:https://news.ycombinator.com/item?id=49211386

Report Page