前言
最近收到爬取王者荣耀战绩的单子,于是在网上一搜发现王者荣耀官方并无开放相应的接口。于是乎发现其他帖子有关于王者营地APP抓包的攻略,但是在本人实测下王者营地APP现已加入模拟器检测和证书的验证。但由于为了单纯对王者营地进行逆向有点太费精力。所以把目标转向微信小程序,结果微信小程序也加入了证书的验证,无法抓包。但是还有QQ小程序,皇天不负有心人,终于可以抓出正常的结果。
工具
Python
Mitmproxy/Clarles/Fidder或者其他抓包工具 (本文用的是mitmproxy)
具体配置就不提及了,其他渠道都可以搜到。
采集
连接网络设置代理,服务器主机名为自己电脑的ip地址,端口号随便写
在terminal中输入(端口号是刚刚随便写的那个)
mitmweb -p 8888
打开QQ中王者营地小程序,打开个人战绩。
在mitmweb中找到https://kohcamp.qq.com/game/morebattlelist,返回的json是存储个人战绩的,抓包成功。
可以看到assistcnt表示助攻,killcnt表示击杀, deadcnt表示死亡,heroId表示使用的英雄,gametime表示时间
那么只要开始写一个脚本配合mitmproxy抓包就可以
import json
def response(flow):
if'game/morebattlelist' in flow.request.url:
for content in json.loads(flow.response.text)['data']['list']:
content_info = {}
content_info['killcnt']=content['killcnt']
content_info['deadcnt'] = content['deadcnt']
content_info['assistcnt'] = content['assistcnt']
content_info['gametime'] = content['gametime']
content_info['heroId'] = content['heroId']
print(content_info)
with open('game_wzyd.txt','a',encoding='utf-8') as f:
f.write(json.dumps(content_info,ensure_ascii=False))
f.write('\n')
在terminal中cd到程序所在的文件夹,再输入
mitmdump -s 你的程序名 -p 8888
成功采集,如图所示:
另外,如果想要爬取 单场对局的具体数据在https://kohcamp.qq.com/role/h5getplaydetail中,同样的操作,不再赘述,不过要搭配appium或者airtest自动化。