【问题标题】:Scrape player stats from NHL-API从 NHL-API 抓取球员统计数据
【发布时间】:2019-05-29 00:52:27
【问题描述】:

试图从游戏中抓取每个玩家的统计数据,但在尝试 .get() 方法时遇到了麻烦。

这是 API: https://statsapi.web.nhl.com/api/v1/game/2017020002/feed/live

要获取球员统计数据,我首先需要他们的 ID。第一个 for 循环通过到达 ('skaters') 并获取他们的 ID 并将其放入 在列表 player_id 中。

接下来的两个 for 循环是获取主/客场和 player_id 中每个 ID 的球员统计数据。玩家 ID 的形式为 number => 8474756 但是获取 player_stats 的 Key 被命名为“ID”THE PLAYERS NUMBER“”,所以每个键都有一个唯一的名称,这就是为什么存在 for 循环的原因。但我不知道如何使它工作。 感谢您的帮助!

import numpy as np
import pandas as pd
import requests
import json
from sklearn import preprocessing
from sklearn.preprocessing import OneHotEncoder

results = []
player_id = []
 for game_id in range(2018020001, 2018020002, 1):
    url = 'https://statsapi.web.nhl.com/api/v1/game/{}/feed/live'.format(game_id)
    r = requests.get(url)
    game_data = r.json()

for homeaway in ['home','away']:
    player_dict = game_data.get('liveData').get('boxscore').get('teams').get(homeaway).get('skaters')
    player_id.append(player_dict)

for homeaway in ['home', 'away']:
    for playerID in player_id:
        play_dict = game_data.get('liveData').get('boxscore').get('teams')
        .get('homeaway').get('players').get('ID'+player_id).get('person')

这是我必须抓取游戏数据的代码,我希望得到与此相同类型的输出。

import numpy as np
import pandas as pd
import requests
import json
from sklearn import preprocessing
from sklearn.preprocessing import OneHotEncoder

results = []
for game_id in range(2018020598, 2018020650, 1):
    url = 'https://statsapi.web.nhl.com/api/v1/game/{}/boxscore'.format(game_id)
    r = requests.get(url)
    game_data = r.json()

    for homeaway in ['home','away']:

    game_dict = game_data.get('teams').get(homeaway).get('teamStats').get('teamSkaterStats')
    game_dict['team'] = game_data.get('teams').get(homeaway).get('team').get('name')
    game_dict['homeaway'] = homeaway
    game_dict['game_id'] = game_id
    results.append(game_dict)


df = pd.DataFrame(results)

这是我希望数据集看起来如何的示例表

PlayerID   Team   Won/lost   opponent   game_id     metric1   metric2 metric_n
  1          LA      1          CAP       0001         10       10        10

【问题讨论】:

  • 你能分享想要的输出吗?您希望脚本执行的结果如何?
  • 我可以贴出我刮游戏数据时写的代码。我想有相同类型的输出。我还将发布一个示例表,说明我希望它的外观。在编辑部分发布了更多信息

标签: python python-3.x loops web-scraping


【解决方案1】:

您的player_id列表列表,因此当您执行for playerID in player_id: 时,您实际上会遍历子列表,而不是玩家ID。尝试修改您的代码:

player_id = {}
results = []

for homeaway in ['home','away']:
    player_dict = game_data.get('liveData').get('boxscore').get('teams').get(homeaway).get('skaters')
    player_id[homeaway] = player_dict

现在player_id 是一个字典,比如{'home': [ID_1, ID_2,...],away: [ID_3, ID_4, ...]}

for homeaway in player_id:
    for playerID in player_id[homeaway]:
        play_dict = game_data.get('liveData').get('boxscore').get('teams').get(homeaway).get('players').get('ID' + str(playerID)).get('person')
        results.append(play_dict)

【讨论】:

  • 非常感谢,正是我想要的结果!谢谢你,先生。 Andrersson,工作就像一个魅力!
猜你喜欢
  • 2019-04-07
  • 1970-01-01
  • 2015-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-20
  • 2018-10-16
相关资源
最近更新 更多