首页 > 解决方案 > 使用来自 Python 的 R 学习 Json 抓取

问题描述

我正在从 python 迁移到 R,并且正在尝试使用我的 python 技能来熟悉使用 R 抓取 json。我在查看和抓取我想要的内容时遇到了一些问题。我很确定我已经关闭了 For 循环,但我不确定如何选择键并返回它们的内容。我已经阅读了一些文档,但是对于 R 来说是新手,有点难以理解。为此,我使用 python 创建了一个快速脚本来展示我在 Rstudio 中尝试做的事情。

import requests
from pprint import pprint

start = '2018-10-03'
end = '2018-10-10'

req = requests.get('https://statsapi.web.nhl.com/api/v1/schedule?startDate=' + str(start) + '&endDate=' + str(end) + '&hydrate=team(leaders(categories=[points,goals,assists],gameTypes=[P])),linescore,broadcasts(all),tickets,game(content(media(epg),highlights(scoreboard)),seriesSummary),radioBroadcasts,metadata,seriesSummary(series),decisions,scoringplays&leaderCategories=&site=en_nhl&teamId=&gameType=&timecode=') 
data = req.json()['dates']

for info in data:
    date = info['date']
    games = info['games']
    for game in games:
        gamePk = game['gamePk']

        print(date, gamePk)

以下是我开始的内容,但我无法理解在哪里可以查看我的 json,而不是锁定 R 的打印数据。我希望能够随时查看字典和键。另一个问题是我如何将键值添加到“向量?或 df?” 并写出来。我熟悉导出到文件,但对如何将值添加到 df 感到好奇。那会绑定吗?还是我不必这样做?

library(jsonlite)

start <- as.Date(c('2018-10-03'))
end <- as.Date(c('2019-04-15')) 


url <- paste0('https://statsapi.web.nhl.com/api/v1/schedule?startDate=', start,'&endDate=', end,'&hydrate=team(leaders(categories=[points,goals,assists],gameTypes=[P])),linescore,broadcasts(all),tickets,game(content(media(epg),highlights(scoreboard)),seriesSummary),radioBroadcasts,metadata,seriesSummary(series),decisions,scoringplays&leaderCategories=&site=en_nhl&teamId=&gameType=&timecode=')

data <- fromJSON(url)

在这里阐述我的问题是斗争所在的进一步样本。

library(jsonlite)

start <- as.Date(c('2018-10-03'))
end <- as.Date(c('2018-10-04')) 

url <- paste0('https://statsapi.web.nhl.com/api/v1/schedule?startDate=', start,'&endDate=', end,'&hydrate=team(leaders(categories=[points,goals,assists],gameTypes=[P])),linescore,broadcasts(all),tickets,game(content(media(epg),highlights(scoreboard)),seriesSummary),radioBroadcasts,metadata,seriesSummary(series),decisions,scoringplays&leaderCategories=&site=en_nhl&teamId=&gameType=&timecode=')

data <- fromJSON(url)

date <- data$dates$date
game_id <- data$dates$games

game <- NULL

for (ids in game_id) {
  pk <- ids$gamePk
  game <- rbind(game, pk)
}

我认为“pk”将在 1 列中,但它在多列中,并且我收到 In rbind:结果列数不是向量长度的倍数

标签: pythonrjsonrstudio

解决方案


推荐阅读