r - 如何抓取NBA数据?
问题描述
我想将联盟中的新秀与场均得分 (PPG) 等数据进行比较。ESPN 和 NBA 有很好的表格可供抓取(就像篮球参考一样),但我刚刚发现它们没有存储在 html 中,所以我不能使用 rvest。就上下文而言,我正在尝试抓取像这样的表格(来自 NBA):
https://i.stack.imgur.com/SdKjE.png
我正在尝试学习如何为此使用 HTTR 和 JSON,但我遇到了一些问题。我遵循了这篇文章中的答案,但它对我不起作用。
这是我尝试过的:
library(httr)
library(jsonlite)
coby.white <- GET('https://www.nba.com/players/coby/white/1629632')
out <- content(coby.white, as = "text") %>%
fromJSON(flatten = FALSE)
但是,我收到一个错误:
Error: lexical error: invalid char in json text.
<!DOCTYPE html><html class="" l
(right here) ------^
有没有更简单的方法可以从 ESPN 或 NBA 上刮桌子,或者有解决这个问题的方法吗?
解决方案
实际上,您可以使用 rvest 进行网络抓取,这是从 Basketball Reference 中抓取 White 的总数表的示例。Sports Reference 网站上任何不是页面第一个表的内容都被列为评论,这意味着我们必须先提取评论节点,然后再提取所需的数据表。
library(rvest)
library(dplyr)
cobywhite = 'https://www.basketball-reference.com/players/w/whiteco01.html'
totalsdf = cobywhite %>%
read_html %>%
html_nodes(xpath = '//comment()') %>%
html_text() %>%
paste(collapse='') %>%
read_html() %>%
html_node("#totals") %>%
html_table()
推荐阅读
- jquery - jQuery load() 只执行 1 行?
- javascript - Vue.js $scopedSlots 不适用于 Vue 实例
- scala - 在Scala中将函数的函数作为参数传递
- ios - 仅停止 firebase 推送通知振动
- python-3.x - 如何在 Python3 中将按键发送到终端?
- spring - spring - 使用 @ActiveProfiles 覆盖 spring.profiles.active
- .net - 在 F# Interactive 中加载 dotnet 项目文件
- sql - Cross join InterBase 根据条件获取重复记录
- c# - c# excel 如何在已用范围内查找第一个单元格。
- javascript - Vapor 3 接收包含 BOOL 的字符串化 JSON