python联盟是什么意思_Python 与 英雄联盟(1)

在我写这篇文章前,兴奋地在知乎站内搜了一下关键词“python 英雄联盟”,又兴奋地发现,我似乎是第一个把python用在A(买关子)方面的人!!!我知道我的机会来了!!

英雄联盟:什么?!你python和我有什么关系?!

嘿嘿,不卖关子了,python就是和你英雄联盟有关系!

前情提要:

这篇文章涉及python爬虫,python数据分析,如果你对此感兴趣,那么

老规矩,开头概括整篇文章。这篇文章关于英雄联盟玩家数据(掌上wegame app)的爬取及数据分析,和遇到的坑(有代码呦 )。

先磨刀(搭环境):

涉及python模块:requests,json(没想到吧!)

相关工具:夜神模拟器(任何一款安卓模拟器都行),fiddler。

假设H:你已具备相关爬虫知识(最简单的),会简单使用抓包工具。(你当然可以拒绝这个假设!)

目的:(灵感来源)分析自己的对战数据,以此来证明自己菜否。

好吧,既然要分析数据,那得要数据啊。于是我赶紧去英雄联盟官网寻找自己得对战数据(web) 然后,

完全找不到。

然后我去pc端wegame找数据,数据虽然有,可发现无处下手。(抓包抓不到)

最后,我去移动端找数据,数据虽然有,可无从下手+1。(无法抓包,模拟器中app闪退)。

啊!天亡我也!这篇文章到此结束。

怎么可能?!虽然发现事情并不简单,可我难道就这样子放弃吗?

办法总是有得呀!虽然模拟器app闪退,我可以用真机呀,我可以换app呀!

于是我换了个掌上英雄联盟,进行真机抓取。

然后发现我需要作的工作是这样的:

是这样的:

这种方法是使用appium(appium在windows下安装是个深坑)进行真机抓取,需要定位每一个含有有价值信息的节点,以及数据的过滤,关键是要写自动脚本,要是数据量小还可以接受,可数据量一大起来(我的破手机)

办法总是有的,办法总是留给愿意去付出努力的靓仔的!

偶然间看到一位大佬的文章,提出了解决app在模拟器上闪退的问题,然后嘿嘿,那么我的机会来了!

(概述一下,就是使用xposed+justtrustme框架)

好!开始抓包!

(抓的时自己账号的对战数据)为保护玩家隐私,id已被我马赛克。

好,请求的数据已经很清楚地摆在我们面前,什么没看清?

那么这个呢?

我无条件承认学好英语是一件收益匪浅地事情。

api? battle?detail?

这不就是%#%$%$掐架,细节吗?(修正中.......)

这不就是对战数据的接口吗?

好,那么来看看这个请求返回的数据

破肥特!!返回json数据,英文好在都看的懂。

那么继续来看看这个请求的headers。

很容易看出,post请求,并且带了条json数据。经过我周密分析,每一场对战的battle_id都是不同的,具体这battle_id是如何生成的,我们来继续分析。

然后

无解了。我不知道,我不会,我头疼。

难道要翻在这阴沟里了?

这么靓仔的我怎么可能翻船呢?

我错过了一个细节,当你在该页面往下滑你会发现

api?battle?list?

这不就是%¥%&掐架,串串吗?(修正中.......)

这不就是对战列表接口吗?

来看看这个接口返回的数据

bettle_id在这!破肥特!

进一步分析你会发现一个很重要的参数。

offset?

消除?偏移?(修正中.....)

这不就是偏移量吗?

经过我仔细观察发现,每次偏移量为10,返回10场对战数据(10个battle_id)。

好,既然不知道这个id如何生成,那么我就给他抓下来!

(经过实践,发现最多能抓到350条id,超过350条返回的都是空数据,也许服务器就只存储玩家近来350场对战数据,不管了,无所谓)

激动人心的代码来了:

import requests

import logging

import time

logging.captureWarnings(True)

url='https://m.wegame.com.cn/api/mobile/lua/proxy/index/mwg_lol_proxy/get_battle_list'

headers={

'Accept':'application/json',

'Cookie':'***********', #cookie当然要换啦,这里太长,我就不写了

'Content-Tyep':'application/json; charset=utf-8',

'Content-Length':'113',

'Host':'m.wegame.com.cn',

'Connection':'Keep-Alive',

'Accept-Encoding':'gzip',

'User-Agent':'okhttp/3.11.0'

}

for offset in range(0,350,10): #offset偏移量处理

try:

json={"offset": offset, "limit": 10, "filter_type": 0, "totalNum": 500, "game_id": 26, "slol_id": "j9GJB4l",

"area_id": 24, "isMe": "true"}

res=requests.post(url=url,json=json,verify=False)

print(res.status_code)

with open('battle_list{0}.json'.format(offset),'w+',encoding='utf8') as f: #保存为json文件

f.write(res.text)

time.sleep(2)

except:

print('error!')

结果如下:

350场battle_id大功告成!

接下来就是battle_id的提取,以及对战数据请求的构造。

代码很简单啦:

import requests

import logging

import json

import time

Battle_list=[]

url='https://m.wegame.com.cn/api/mobile/lua/proxy/index/mwg_lol_proxy/get_battle_detail'

logging.captureWarnings(True)

FileName=r'Z:\VSPY\battle_list{}.json'

headers={

'Accept':'application/json',

'Cookie':'******', #同样地替换cookies

'Content-Tyep':'application/json; charset=utf-8',

'Content-Length':'98',

'Host':'m.wegame.com.cn',

'Connection':'Keep-Alive',

'Accept-Encoding':'gzip',

'User-Agent':'okhttp/3.11.0'

}

for offset in range(0,350,10):

with open(FileName.format(offset),'r',encoding='utf8') as f:

data=f.read()

hjson=json.loads(data)

Datas=hjson['data']['player_battle_brief_list']

for i in Datas:

Battle_list.append(i.get('battle_id'))

print(Battle_list)

print(len(Battle_list))

for battle_id in Battle_list: #将每一个battle_id参数传入请求

data={"game_id":26,"dst_slol_id":"j9GJB4l","req_slol_id":"j9GJB4l","area_id":24,"battle_id":battle_id,"show_type":1}

try:

res=requests.post(url=url,json=data,verify=False)

with open(r'Z:\VSPY\战绩\{}.json'.format(battle_id),'w+',encoding='utf8') as f:

f.write(res.text)

print(res.status_code)

time.sleep(2)

except:

print('error')

结果如下:

350场对战数据大功告成!

我们来看看里面数据:

哈哈哈啊哈!今天到此为止,至于数据分析嘛,下次再更!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值