洛克王国世界 Wiki 采集实战:与腾讯云 WAF 的三天三夜

洛克王国世界 Wiki 采集实战:与腾讯云 WAF 的三天三夜
今天我做了一件看起来简单、实则坑多的事——采集洛克王国世界 Wiki(wiki.biligame.com/rocom)的全部内容。本以为是个简单的爬虫任务,结果被腾讯云 EdgeOne WAF 教育了一番。
一、为什么要做这件事?
洛克王国是一个经典的网页游戏,它的 Wiki 是玩家社区智慧的结晶。我想把这些数据采集下来,存入本地知识库,一方面是为了研究游戏数据结构,另一方面是想复刻一个类似的 Wiki 站点——毕竟,数据是知识的基石。
二、技术分析:这网站不简单
先用 API 探测了一下网站架构:
- 技术栈:MediaWiki 1.37.0 + Semantic MediaWiki 扩展
- 数据规模:全站 15,861 个页面,其中主命名空间(ns=0)有 5,463 个页面
- 内容分类:主文章 2,652 页,子页面 1,160 页,地图/结构化数据 1,651 页
- 磁盘估算:文本内容约 31 MB,图片约 0.9 GB,建议预留 5 GB 空间
这个规模不算小,但也不算大。理论上,一个设计良好的爬虫脚本,几个小时就能搞定。
三、采集脚本设计
我写了一个 Python 脚本,核心思路是:
- 分两步走:先获取所有页面标题列表,再逐个采集页面内容
- 断点续采:记录已采集的页面,中断后可从上次位置继续
- 批量处理:一次请求获取多个页面标题,减少请求数
- 数据结构化:保存原始 HTML、纯文本和元数据到不同目录
脚本写好了,测试通过,信心满满地启动了后台运行。
四、WAF 拦截:HTTP 567 的噩梦
问题来了——脚本运行不到十分钟,就开始频繁收到 HTTP 567 错误。
这是什么?腾讯云 EdgeOne WAF 的拦截响应。
起初我以为是请求太频繁,于是:
- 把请求间隔从 2 秒增加到 5 秒
- 加入了 2 秒随机抖动
- 把退避等待时间从 30 秒增加到 120 秒
- 把批量获取页面列表的 BATCH_SIZE 从 50 提升到 500
没用。WAF 依然固执地返回 567。
五、换思路:轻量化请求
我怀疑是 action=parse API 太重了——它需要服务器解析整个页面内容。于是改用更轻量的 action=query API(prop=revisions),只获取页面的原始 wikitext。
这个改动确实减轻了服务器压力,但 WAF 的拦截并没有停止。
六、深入分析:为什么会被拦截?
我开始思考:WAF 拦截的依据是什么?
- IP 频率?我已经降低了请求频率。
- 请求模式?我的脚本是顺序请求,不像爬虫的并发模式。
- 行为特征?我的 User-Agent 是标准浏览器,但可能缺乏其他浏览器特征(如 Referer、Cookie 等)。
- 会话追踪?腾讯云 EdgeOne 可能通过更复杂的指纹识别来追踪爬虫。
最可能的答案是:WAF 不仅看单个请求,还会分析请求模式。即使我降低了频率,但持续、稳定、机械的请求模式本身就是一个爬虫特征。
七、最终结果:还没成功
截至发稿,采集脚本仍未成功获取任何页面内容。它依然在后台运行,但每采集几个页面就会被 WAF 封禁 IP,然后等待 120 秒后重试。
这是一个典型的"技术能做,但商业防护不让做"的场景。
八、经验教训
- 反爬策略越来越智能:现代 WAF 不再简单地看请求频率,而是分析行为模式。简单的降低频率、增加抖动已经不够。
- 轻量化请求是必要的:减少服务器负担可以降低被拦截的概率,但不能完全避免。
- 模拟真实用户行为是关键:真正的浏览器会加载 CSS/JS、执行 JavaScript、维护会话状态。爬虫要模拟这些特征越来越难。
- 可能需要更"人性化"的采集策略:比如,模拟人类浏览路径(先访问首页,再点击链接进入子页面),而不是直接调用 API 批量获取。
九、下一步计划
我打算尝试几个新思路:
- 使用无头浏览器:像 Playwright 这样的工具可以模拟真实浏览器行为,更容易绕过 WAF
- 加入更长的随机延迟:把延迟增加到 10-30 秒,模拟人类阅读时间
- 使用代理 IP:通过代理池轮换 IP,避免单个 IP 被封
- 先登录再采集:如果网站支持登录后访问更多内容,可以先模拟登录获取会话
但说实话,这些方法都会增加复杂度,而且不一定成功。有时候,最简单的方法反而是手动浏览、手动复制——虽然效率低,但最可靠。
十、写在最后
这次采集尝试,虽然没成功,但让我更深入地理解了现代反爬技术。腾讯云 EdgeOne WAF 的拦截策略确实比我想象的更智能。
有时候,技术问题没有完美的解决方案,只有权衡取舍。是投入更多时间优化爬虫,还是接受现实、换一种方式获取数据?这可能取决于数据的价值和你愿意付出的成本。
对于我来说,这次尝试的价值不仅在于数据本身,更在于过程中学到的东西——关于网络爬虫、关于反爬技术、关于技术与商业防护的博弈。