r - 如何使用 R 在 html 中的注释标签内抓取表格?

标签 r web-scraping html-parsing scrape rvest

我正在尝试使用 rvest 从 http://www.basketball-reference.com/teams/CHI/2015.html 中抓取。我使用了 selectorgadget 并发现我想要的表的标签是#advanced。但是,我注意到它没有捡起来。查看页面源代码,我注意到表格位于 html 注释标签 <!--

从评论标签中获取表格的最佳方法是什么?谢谢!

编辑:我正在尝试拉“高级”表:http://www.basketball-reference.com/teams/CHI/2015.html#advanced::none

最佳答案

好的,我知道了。

library(stringi)
library(knitr)
library(rvest)


 any_version_html <- function(x){
       XML::htmlParse(x)
    }
a <- 'http://www.basketball-reference.com/teams/CHI/2015.html#advanced::none'
b <- readLines(a)
c <- paste0(b, collapse = "")
d <- as.character(unlist(stri_extract_all_regex(c, '<table(.*?)/table>', omit_no_match = T, simplify = T)))

e <- html_table(any_version_html(d))


> kable(summary(e),'rst')
======  ==========  ====
Length  Class       Mode
======  ==========  ====
9       data.frame  list
2       data.frame  list
24      data.frame  list
21      data.frame  list
28      data.frame  list
28      data.frame  list
27      data.frame  list
30      data.frame  list
27      data.frame  list
27      data.frame  list
28      data.frame  list
28      data.frame  list
27      data.frame  list
30      data.frame  list
27      data.frame  list
27      data.frame  list
3       data.frame  list
======  ==========  ====


kable(e[[1]],'rst')


===  ================  ===  ====  ===  ==================  ===  ===  =================================
No.  Player            Pos  Ht     Wt  Birth Date          Â    Exp  College                          
===  ================  ===  ====  ===  ==================  ===  ===  =================================
 41  Cameron Bairstow  PF   6-9   250  December 7, 1990    au   R    University of New Mexico         
  0  Aaron Brooks      PG   6-0   161  January 14, 1985    us   6    University of Oregon             
 21  Jimmy Butler      SG   6-7   220  September 14, 1989  us   3    Marquette University             
 34  Mike Dunleavy     SF   6-9   230  September 15, 1980  us   12   Duke University                  
 16  Pau Gasol         PF   7-0   250  July 6, 1980        es   13                                    
 22  Taj Gibson        PF   6-9   225  June 24, 1985       us   5    University of Southern California
 12  Kirk Hinrich      SG   6-4   190  January 2, 1981     us   11   University of Kansas             
  3  Doug McDermott    SF   6-8   225  January 3, 1992     us   R    Creighton University    


## Realized we should index with some names...but this is somewhat cheating as we know the start and end indexes for table titles..I prefer to parse-in-the-dark.

# Names are in h2-tags
e_names <- as.character(unlist(stri_extract_all_regex(c, '<h2(.*?)/h2>', simplify = T)))
e_names <- gsub("<(.*?)>","",e_names[grep('Roster',e_names):grep('Salaries',e_names)])
names(e) <- e_names
kable(head(e$Salaries), 'rst')

===  ==============  ===========
 Rk  Player          Salary     
===  ==============  ===========
  1  Derrick Rose    $18,862,875
  2  Carlos Boozer   $13,550,000
  3  Joakim Noah     $12,200,000
  4  Taj Gibson      $8,000,000 
  5  Pau Gasol       $7,128,000 
  6  Nikola Mirotic  $5,305,000 
===  ==============  ===========

关于r - 如何使用 R 在 html 中的注释标签内抓取表格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40616357/

相关文章:

python - 如何在不覆盖结果的情况下抓取多个网页?

r - 从 R 中的一组日期中提取工作日

r - 如何使用r中的map函数查找范围和分位数

r - R中的时间序列

r - 如何根据条件在 R 中上下移动整行?

python - 使用请求抓取动态页面

pandas - 使用 BeautifulSoup 将表抓取到数据框中

html - libxml2 HTML解析

python - 在检查粗体时从 HTML 文件中提取所有文本 (Python)

java - 如何在解析 html 页面时从 html 页面中的 javascript 函数中提取变量的值