使用来自Python的R学习Json抓取
我将从python迁移到R,并尝试使用我的python技能熟悉使用R刮取json。我在查看和刮取我想要的内容时遇到一些问题。我很确定我有For循环,但我不确定如何选择键并返回它们的内容。我读过一些文件,但作为一个新手,有点难以理解。为此,我使用python创建了一个快速脚本,以显示我在Rstudio中尝试执行的操作使用来自Python的R学习Json抓取,python,r,json,rstudio,Python,R,Json,Rstudio,我将从python迁移到R,并尝试使用我的python技能熟悉使用R刮取json。我在查看和刮取我想要的内容时遇到一些问题。我很确定我有For循环,但我不确定如何选择键并返回它们的内容。我读过一些文件,但作为一个新手,有点难以理解。为此,我使用python创建了一个快速脚本,以显示我在Rstudio中尝试执行的操作 import requests from pprint import pprint start = '2018-10-03' end = '2018-10-10' req = r
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的打印数据时遇到了一个问题。我希望能够边走边查看字典和密钥。另一个问题是如何将键值添加到“vector”或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)
开始尝试str(数据)
查看所有内容的结构。您可以使用data$dates$games
之类的工具访问数据组件。如果您想查看lubridate软件包,R日期类型可能会很麻烦,因为它们与其他语言截然不同。还要记住,向量从索引1开始。fromJSON
返回一个普通(如果通常非常难看)列表。您可以通过子集拉出单个元素;要获得更多信息,您需要熟悉lappy
和朋友(或)。这是一个有趣的(但年轻的)自动化提取步骤的项目。另外,它提供了一种更好(而且功能更强大)的请求语法,您可以将查询作为参数输入;只要调用View
查看响应即可。它甚至可以为您生成子集代码;它在嵌套的数据帧上走得太远了,所以response%map('games')%%>%modify\u depth(2,discard,is.list)%%>%map\u dfr(dplyr::bind\u rows)
。要得到剩下的将是更多的工作。
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)
}