【问题标题】:Web Scraping Basketball Reference using R使用 R 的 Web 抓取篮球参考
【发布时间】:2018-07-24 12:18:42
【问题描述】:

我有兴趣在basketball-reference.com 上提取球员表。我已经成功提取了特定球员(例如勒布朗詹姆斯)的每场比赛统计表,这是网页上列出的第一个表格。但是,页面上有 10 多个表格我似乎无法提取。我已经能够通过几种不同的方式将表格放入 R 中。一、使用rvest包:

library(rvest)
lebron <- "https://www.basketball-reference.com/players/j/jamesle01.html"
lebron_webpage <- read_html(lebron)
lebron_table <- html_table(lebron_webpage, fill = TRUE)
lebron_pergame <- data.frame(lebron_table)

现在,我在一个不错的数据框中获得了勒布朗职业生涯的场均数据。我还可以结合使用 XML 和 RCurl 包来读取同一张表。

library(RCurl)
library(XML)
lebron_url <- paste0(lebron)
lebron_url <- getURL(lebron_url)
lebron_table <- readHTMLTable(lebron_url, which = 1)

如果我想在页面上的其他表格中阅读,问题就来了。例如,页面上的下一个表是总计。我尝试使用 CSS 选择器来选择我想要读取的特定表格,但我无法让它工作。我也尝试右键单击,检查页面上的元素并复制表格的 XPath,但我也无法让它工作。我花了很多时间在谷歌上研究这个问题,但似乎找不到任何解决这个问题的方法。任何帮助将不胜感激!提前致谢!

【问题讨论】:

标签: r xml web-scraping rvest rcurl


【解决方案1】:

以下表格是动态加载的 (js)。因此,您有很多可能性来提取您的表格。

使用 RSelenium 模拟用户导航:

library(rvest)
library(RSelenium)
lebron <- "https://www.basketball-reference.com/players/j/jamesle01.html"
rD <- rsDriver()
remDr <- rD[["client"]]
remDr$navigate(lebron)
lebron_webpage <- read_html(remDr$getPageSource()[[1]])
lebron_table <- html_table(lebron_webpage, fill = TRUE)

for (i in 1:length(lebron_table)) 
assign(paste0("table_",i),data.frame(lebron_table[i]))
#You can rename your table by a title to be more explicit

另一种方法是收集js事务,看看能不能得到json结果。

希望对你有帮助

哥达维亚诺尼

【讨论】:

    【解决方案2】:

    这是另一个post的部分回答,只是向前传递,在体育参考网站中,任何不是第一个表的都被列为评论表,所以我们必须拉取评论,然后提取数据框架 - 在这种情况下,您要求的是“总计”表。

    library(rvest)
    library(dplyr)
    
    lebron = 'https://www.basketball-reference.com/players/j/jamesle01.html'
    
    totalsdf =  lebron %>%
    read_html %>%
    html_nodes(xpath = '//comment()') %>%
    html_text() %>%
    paste(collapse='') %>%
    read_html() %>% 
    html_node("#totals") %>% 
    html_table()
    

    【讨论】:

      猜你喜欢
      • 2021-12-25
      • 2021-04-18
      • 1970-01-01
      • 1970-01-01
      • 2022-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多