最近老板爱上了吃鸡(手游:全军出击),经常拉着我们开黑,只能放弃午休的时间,陪老板在沙漠里奔波。 上周在在微信游戏频道看战绩的时候突发奇想,是不是可以通过这个方式抓取到很多战斗数据,然后分析看看有什么规律。
小编是一名python开发工程师,群里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以加群:877562786
秀一波战绩,开黑情况下我们团队吃鸡率非常高,近100场吃鸡次数51次
简单评估了一下,觉得可行,咱就开始。
Step 1 分析数据接口
第一步当然是把这些战绩数据采集下来,首先我们需要了解页面背后的故事。去看看页面是如何获取战斗数据的。
使用Charles抓包
抓包实现
在Mac下推荐使用工具Charles来从协议层抓取手机上的流量,原理就是在Mac上开启一个代理服务器,然后将手机的网络代理设置为Mac,这样手机上的所有流量都会经过我们的代理服务器了。 大致流程如下:
https加密流量的处理
在实际操作的时候发现微信所有的流量都走了HTTPS,导致我们的抓到的都是加密数据,对我们没有任何参考意义。 经过研究,可以通过在手机和电脑都安装Charles根证书的方式来实现对Https流量的分析,具体操作可以参考:
charles mac下https抓包和iphone https抓包
解决Charles无法正常抓包iOS 11中的Https请求
安装证书后,我们的流量大致是这样子的
经过上述的配置,我们已经可以读取到https的请求和响应数据了,如下图所示。
windows下用findler可以实现相同的功能
其实这就是一个非常典型的中间人场景
数据接口
接下来就根据这些数据来找出我们需要的接口了,经过分析,主要涉及三个接口
获取用户信息接口
获取用户战绩列表接口
获取用户指定战绩详细信息接口
下面我们一个一个看
1. 获取用户信息接口
request
API | /cgi-bin/gamewap/getpubgmbattlelist |
---|---|
方法 | GET |
参数 | openid、pass_ticket、plat_id、after_time、limit |
cookie | key pass_ticket、uin、pgv_pvid、sd_cookie_crttime、sd_userid |
response
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
{ "user_info": { "openid": "oODfo0pjBQkcNuR4XLTQ321xFVws", "head_img_url": "http://wx.qlogo.cn/mmhead/Q3auHgzwzM5hSWxxxxxUQPwW9ibxxxx9DlxLTsKWk97oWpDI0rg/96", "nick_name": "望", "role_name": "xxxx", "zone_area_id": 0, "plat_id": 1 }, "battle_info": { "total_1": 75, "total_10": 336, "total_game": 745, "total_kill": 1669 }, "battle_list": [{ "map_id": 1, "room_id": "6575389198189071197", "team_id": 57, "dt_event_time": 1530953799, "rank_in_ds": 3, "times_kill": 1, "label": "前五", "team_type": 1, "award_gold": 677, "mode": 0 }], "appitem": { "AppID": "wx13051697527efc45", "IconURL": "https://mmocgame.qpic.cn/wechatgame/mEMdfrX5RU0dZFfNEdCsMJpfsof1HE0TP3cfZiboX0ZPxqh5aZnHjxPFXUGgsXmibe/0", "Name": "绝地求生 全军出击", "BriefName": "绝地求生 全军出击", "Desc": "官方正版绝地求生手游", "Brief": "枪战 | 808.2M", "WebURL": "https://game.weixin.qq.com/cgi-bin/h5/static/detail_v2/index.html?wechat_pkgid=detail_v2&appid=wx13051697527efc45&show_bubble=0", "DownloadInfo": { "DownloadURL": "https://itunes.apple.com/cn/app/id1304987143", "DownloadFlag": 5 }, "Status": 0, "AppInfoFlag": 45, "Label": [], "AppStorePopUpDialogConfig": { "Duration": 1500, "Interval": 172800, "ServerTimestamp": 1531066098 }, "HasEnabledChatGroup": false, "AppType": 0, "game_tag_list": ["绝地求生", "正版还原", "好友开黑", "百人对战", "超大地图"], "recommend_reason": "正版绝地求生,荒野射击", "size_desc": "808.2M" }, "is_guest": true, "is_blocked": false, "errcode": 0, "errmsg": "ok" }
|
2. 获取用户战绩列表接口
分析
openid是用户的惟一标识。
2. 获取用户战绩列表接口
request
API | /cgi-bin/gamewap/getpubgmbattlelist |
---|---|
方法 | GET |
参数 | openid、pass_ticket、plat_id、after_time、limit |
cookie | key pass_ticket、uin、pgv_pvid、sd_cookie_crttime、sd_userid |
response
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |