ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

通过Leaguepedia API实现抓取英雄联盟赛事数据

2021-06-16 00:00:21  阅读:400  来源: 互联网

标签:UTC SP 抓取 DateTime API 2020 UniqueGame SG Leaguepedia


概述

帮助文档可以看到,Leaguepedia的赛事数据可以通过mwclient这个包抓取相关赛事数据,包括首龙、首塔、赛区、比赛名称、BP、英雄、经济、胜负等等数据。

##安装mwclient
pip install mwcleric

代码示例:

import mwclient
import time
import datetime as dt
import pandas as pd
from datetime import date, timedelta
#SG是游戏数据,SP是选手数据,通过UniqueGame这一项进行合并,
#以下代码的抓取的数据包括赛事名称、赛事时间、队伍1与队伍2的名称、胜者、版本、
#选手ID、队伍名称、选用英雄、召唤师技能、符文、选手位置、赛事编号、红蓝方
#筛选条件为在2020-01-25进行的比赛
date="2020-01-25"
date=dt.datetime.strptime(date, "%Y-%m-%d").date()

site = mwclient.Site('lol.fandom.com', path='/')
response = site.api('cargoquery',
	limit = "max",
	tables = "ScoreboardGames=SG, ScoreboardPlayers=SP",
	join_on = "SG.UniqueGame=SP.UniqueGame",
	fields = "SG.Tournament, SG.DateTime_UTC, SG.Team1, SG.Team2, SG.Winner, SG.Patch, SP.Link, SP.Team, SP.Champion, SP.SummonerSpells, SP.KeystoneMastery, SP.KeystoneRune, SP.Role, SP.UniqueGame, SP.Side",
	where = "SG.DateTime_UTC >= '" + str(date) + " 00:00:00' AND SG.DateTime_UTC <= '" + str(date+dt.timedelta(1)) + " 00:00:00'")
	#返回的是一个嵌套的OrderedDict,需要先通过json.dumps转换成普通的Dict
	response = json.loads(json.dumps(response))
	#print(response)

输出response:

{'limits': {'cargoquery': 500}, 'cargoquery': [{'title': {'Tournament': 'CBLOL 2020 Split 1', 'DateTime UTC': '2020-01-25 15:48:00', 'Team1': 'paiN Gaming', 'Team2': 'Flamengo Esports', 'Winner': '2', 'Patch': '10.1', 'Link': 'Yang (Felipe Zhao)', 'Team': 'paiN Gaming', 'Champion': 'Gangplank', 'SummonerSpells': 'Flash,Teleport', 'KeystoneMastery': '', 'KeystoneRune': 'Grasp of the Undying', 'Role': 'Top', 'UniqueGame': 'CBLOL/2020 Season/Split 1/Scoreboards_1_1', 'Side': '1', 'DateTime UTC__precision': '0'}}, ...{'title': {'Tournament': 'NA Academy 2020 Spring', 'DateTime UTC': '2020-01-25 01:20:00', 'Team1': 'FlyQuest Academy', 'Team2': 'CLG Academy', 'Winner': '1', 'Patch': '10.1', 'Link': 'Fill', 'Team': 'CLG Academy', 'Champion': 'Nautilus', 'SummonerSpells': 'Ignite,Flash', 'KeystoneMastery': '', 'KeystoneRune': 'Aftershock', 'Role': 'Support', 'UniqueGame': 'NA Academy League/2020 Season/Spring Season/Scoreboards_4_1', 'Side': '2', 'DateTime UTC__precision': '0'}}]}

实际上对这种嵌套的词典可以直接使用pandas中的json_normalize进行转换

df = pd.json_normalize(response,record_path=['cargoquery'],sep = "-")
df.to_csv('Result.csv') 

最后保存的csv如图所示(这里我用R的dplyr包在R中把dataframe转换成了tibble,更方便处理):
在这里插入图片描述

p.s. 要注意的是mwclient抓取时有一定的规则,可以到网页的query上尝试一下,比如选手的数据要在Scoreboard.Players这个table里面查询,筛选选手名称的时候可以用SP.Link = "选手名称"进行筛选,其他的比如赛事地点等等都归属不同table中的不同field。而且mwclient中很多field已经废用或者有bug,需要对照leaguepedia的文档来筛选,比较麻烦。如果只是分析以往的数据,可以直接到Oracle’s Elixir 这个网站直接下载S6 - S11的数据(但这个网站整理的版本不保证完整,偶尔会有缺失值)

标签:UTC,SP,抓取,DateTime,API,2020,UniqueGame,SG,Leaguepedia
来源: https://blog.csdn.net/lazymark2/article/details/117935338

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有