【发布时间】:2018-05-24 12:25:44
【问题描述】:
我已经花了很长时间使用 R 来尝试抓取 NBA 数据,到目前为止,我一直在反复尝试,但最终我找到了 documentation。前段时间我在抓取shotchartdetail时遇到了一些问题,当我找到this
时发现了问题这行得通
这就是我所做的:
shotURLtotal <- paste0("http://stats.nba.com/stats/shotchartdetail?CFID=33&CFPARAMS=2016-17&ContextFilter=&ContextMeasure=FGA&DateFrom=&DateTo=&GameID=&GameSegment=&LastNGames=0&LeagueID=00&Location=&MeasureType=Base&Month=0&OpponentTeamID=0&Outcome=&PaceAdjust=N&PerMode=PerGame&Period=0&PlayerID=0&PlusMinus=N&Position=&Rank=N&RookieYear=&Season=2016-17&SeasonSegment=&SeasonType=Regular+Season&TeamID=0&VsConference=&VsDivision=&mode=Advanced&showDetails=0&showShots=1&showZones=0&PlayerPosition=")
Season <- rjson::fromJSON(file = shotURLtotal, method="C")
Names <- Season$resultSets[[1]][[2]]
Season <- data.frame(matrix(unlist(Season$resultSets[[1]][[3]]), ncol = length(Names), byrow = TRUE))
colnames(Season) <- Names
但这不是
但是当我尝试对 shotchartlineupdetail 执行相同操作时,它不起作用,我怀疑它与 CFID 有关,而我没有知道是什么意思,这是我试过的。
shoturl <- "http://stats.nba.com/stats/shotchartlineupdetail/?leagueId=00&season=2016-17&seasonType=Regular+Season&teamId=0&outcome=&location=&month=0&seasonSegment=&dateFrom=&dateTo=&opponentTeamId=0&vsConference=&vsDivision=&gameSegment=&period=0&lastNGames=0&gameId=&group_id=0&contextFilter=&contextMeasure=FGA"
Season <- rjson::fromJSON(file = shoturl, method="C")
Names <- Season$resultSets[[1]][[2]]
Season <- data.frame(matrix(unlist(Season$resultSets[[1]][[3]]), ncol = length(Names), byrow = TRUE))
colnames(Season) <- Names
预期结果
预期结果应该是具有以下列的数据框:
c("GRID_TYPE", "GAME_ID", "GAME_EVENT_ID", "GROUP_ID", "GROUP_NAME", "PLAYER_ID", "PLAYER_NAME", "TEAM_ID", "TEAM_NAME", "PERIOD", "MINUTES_REMAINING", "SECONDS_REMAINING", "EVENT_TYPE", "ACTION_TYPE", "SHOT_TYPE", "SHOT_ZONE_BASIC", "SHOT_ZONE_AREA", "SHOT_ZONE_RANGE", "SHOT_DISTANCE", "LOC_X", "LOC_Y", "SHOT_ATTEMPTED_FLAG", "SHOT_MADE_FLAG", "GAME_DATE", "HTM", "VTM")
您可以通过以下方式获得:
shoturl <- "http://stats.nba.com/stats/shotchartlineupdetail/?leagueId=00&season=2016-17&seasonType=Regular+Season&teamId=0&outcome=&location=&month=0&seasonSegment=&dateFrom=&dateTo=&opponentTeamId=0&vsConference=&vsDivision=&gameSegment=&period=0&lastNGames=0&gameId=&group_id=0&contextFilter=&contextMeasure=FGA"
Season <- rjson::fromJSON(file = shoturl, method="C")
Names <- Season$resultSets[[1]][[2]]
所以名称将是数据框的列,问题是不使用 CFID 你会得到这些列的数据应该是空的列表,@be_green 的答案给出的是联盟平均水平,我需要球队的具体数据
【问题讨论】:
-
您能否举一个您期望的输出示例?
-
嗨@be_green 根据您的要求,我添加了预期结果,它们与示例中显示的结果非常相似,但它也将球场上的球员作为变量
-
@DerekCorcoran 据我所知,API 根本不是真正的 API。它很笨重,似乎只是为了服务于网站上出现的表格而设计的。如果没有使用它的页面,则完全有可能不推荐使用 shotchartlineupdetail 端点。
-
哈哈哈,我是前MVP的@JamesThomasDurant兄弟,哈哈哈哈,如果你有回复请告诉我
-
没有回应...他们可能从我的投篮数据中看出我与 MVP 的关系并不密切。
标签: r web-scraping rjson