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場對戰數據大功告成!
我們來看看里面數據:
哈哈哈啊哈!今天到此為止,至于數據分析嘛,下次再更!
總結
以上是生活随笔為你收集整理的python联盟是什么意思_Python 与 英雄联盟(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何用vs做界面_5分钟改完100个界面
- 下一篇: python编写自定义模块_编写和导入自