当前位置:首页>python>Python爬取微信小程序接口:还原王者荣耀HOK赛事列表,算出报名率与满员预警

Python爬取微信小程序接口:还原王者荣耀HOK赛事列表,算出报名率与满员预警

  • 2026-09-26 20:00:43
Python爬取微信小程序接口:还原王者荣耀HOK赛事列表,算出报名率与满员预警

做 Python爬虫 和 电竞本地生活分析 的朋友,对《王者荣耀》官方合作赛事平台(卡游/王者赛宝系小程序 mpapi.kayou110.com)一定不陌生。

线下门店赛、城市赛、资格赛、五排公开赛……这些数据的商业价值非常高:

  • 某城市周末档期热度

  • 门店承接赛事能力

  • 高价赛事(人均费用)分布

  • 报名满员速度 → 用户活跃度

  • 资格赛密度 → 职业通道热度

但这类数据不在普通网页里,全在 微信小程序 HTTPS 接口 里。不抓包,拿不到;不会还原请求头,服务器直接拒。

今天这篇,我基于 Charles / Fiddler 抓包 → 还原 get_matchlist 接口 → Python requests 复现 → 兼容根节点 list/dict → 衍生“报名率 / 剩余名额 / 满员预警”,把整套小程序爬虫思路拆给你看。核心全讲,但 Match-Token 续期、参数签名校验、小程序加密 body 只给逻辑不贴完整封装——毕竟能稳定跑、不被网关拦的脚本,和跑一次 401 的 Demo 是两个东西。


Python爬取微信小程序HOK赛事 · 核心逻辑拆解

技术栈:Charles抓包 + requests复现 + JSON根节点兼容 + CSV衍生指标


一、为什么小程序赛事数据值得爬?

字段

运营价值

门店 / 城市 / 地址 / 经纬度

电竞门店 POI 分布

开赛时间 / 星期

周末档期冲突分析

已报名 / 最大人数

热度与转化漏斗

报名率 / 剩余名额

满员预警(≥80% 标“即将满员”)

人均费用

赛事商业化分层

是否资格赛 / 组别

职业晋升通道密度

距离(米)

本地半径投放参考

👉 一份 CSV = 一套 城市电竞赛事运营看板。


二、抓包定位接口(小程序爬虫第 1 步)

工具:Charles / Fiddler / mitmproxy

步骤:

  1. 手机/模拟器代理到电脑 8888

  2. 安装并信任 Charles 根证书(iOS/Android 都要)

  3. 打开微信 → 王者荣耀赛事小程序 → 切到“报名中”

  4. Network 过滤 mpapi.kayou110.com

  5. 命中:

GET https://mpapi.kayou110.com/project/matchapi/get_matchlist    ?filter=ALL&region=全部&page=1&limit=10    &status=baoming&gamename=HOK&lat=22.80&lng=113.29

✅ 关键请求头:

  • User-Agent:带 MicroMessenger/7.0.20...MiniProgramEnv/Windows

  • Referer:servicewechat.com/wx629e4668e9891589/42/page-frame.html

  • Match-Token:登录态令牌(短时有效)

  • Platform: 3(小程序标识)

⚠️ 坑位:

  • 不带 Referer → 403

  • Token 过期 → {"code":401} 网关错误页(沙盒常返 dict)

  • 完整签名/时间戳方案不展开


三、根节点兼容:list or dict?(你这段代码最稳的一点)

小程序本地真机返回:

[ {id:1,...}, {id:2,...} ]

沙盒 / 网关拦截返回:

{"code":500,"msg":"gateway error","data":null}

✅ 兼容逻辑:

if isinstance(json_data, list):    items = json_dataelif isinstance(json_data, dict):    items = (json_data.get("match")             or json_data.get("data")             or json_data.get("list") or [])

⚠️ 坑位:

  • 直接 json_data.get("match") → list 没有 get → 报 'list' object has no attribute 'get'

  • 不判断空 → 死循环翻页

👉 这也是为什么你本地跑通、沙盒报错的原因,已经在代码里修对了。


四、衍生指标算法

原始接口只给:

{"men": 38, "maxplayer": 50, ...}

✅ 算出运营级指标:

fill_rate = f"{men_i / max_i * 100:.1f}%" if max_i > 0 else "0.0%"remain = max_i - men_iwarn = ("已满员" if men_i >= max_i        else "即将满员" if men_i / max_i >= 0.8        else "可报名")

✅ 价值:

  • ≥80% 自动标“即将满员” → 运营介入扩容

  • 剩余名额 → 投放文案直接复用

  • 报名率排序 → 找城市爆款门店

👉 这一步,是把“爬虫”变成“分析系统”的分界线。


五、分页与终止条件

params = {"page": page, "limit": 10, "status": "baoming", ...}res = requests.get(url, headers=headers, params=params, timeout=10)ifnotparse_json(res.json()):    breakpage += 1; time.sleep(1)

✅ 关键点:

  • status=baoming 只抓报名中(可改 all / end)

  • lat/lng 决定“附近赛事”半径(小程序同款逻辑)

  • 连续空页 → 终止,不暴力翻页

⚠️ 坑位:

  • 不 sleep → IP/Token 限速

  • 不改 region → 只拿全国混合数据

六、我故意不展开的三处

  1. Match-Token 自动续期:小程序登录态 → refresh_token 流转

  2. 请求签名 sign:md5(参数+timestamp+key) 校验还原

  3. 响应 gzip / AES 解码:部分小程序返回体加密处理


七、这套数据能干什么?

  • 电竞门店:评估周末承接量与溢价空间

  • 城市运营:热区地图(POI + 报名率热力)

  • 赛事策划:同类赛事历史满员速度对标

  • 投放团队:半径 5km 高意向用户圈选

  • 数据产品:HOK 城市赛事公开看板


八、结尾软广

爬虫不难,难的是从微信小程序 HTTPS 里把业务指标“算出来”,而不只是把 JSON 存盘。

这篇是 《Python 商业数据源实战》 的“小程序抓包篇”,也是首次打通 电竞 × 本地生活 × 运营指标 的一篇。

完整源码(含 Token 续期、sign 还原、满员预警看板)在圈子里,后台回 HOK赛事 看入口。

最新文章

随机文章