使用Rvest

时间:2019-11-06 07:32:11

标签: r web-scraping rvest

我正在尝试学习如何使用rvest软件包进行一些剪贴。我正在使用此url加载信息,并且试图获取URL中标记为“高级”的表的信息:

enter image description here

当我尝试加载信息时,我只能获得第一个表。我的意思是,当我使用Google Chrome浏览器检查时,看到表格中的数字被标记为class =“ right”。所以这就是我尝试过的:

library(rvest)
library(stringr)

url = url("https://www.basketball-reference.com/players/l/leonaka01.html")

read = html_nodes(read_html(url),
                         '.right')

read2 = str_replace_all(html_text(read), 
                     "[\r\n\t]" , "")

我看到的是读取的是351个值的列表。好的,就是他检测到351个标记为正确的值。如果得到最后一个read2 [351],则会看到“ 29.3”,它是第一个表的最后一个值。

那么...如何获取有关其他表的信息?我从未告诉过R获取第一个表,我以为我会获得所有表的所有信息,而我的下一步就是以某种方式过滤“高级”表值。

致谢

1 个答案:

答案 0 :(得分:4)

“高级”表隐藏在注释下,因此不能直接访问。我们可以使用xpath将所有注释汇总在一起,然后从中解析表。

library(rvest)
url = "https://www.basketball-reference.com/players/l/leonaka01.html"

url %>%
  read_html %>%
  html_nodes(xpath = '//comment()') %>%
  html_text() %>%
  toString() %>%
  read_html() %>%
  html_node('table#advanced') %>%
  html_table() 

#      Season Age  Tm  Lg Pos   G    MP  PER   TS%  3PAr   FTr ORB% ...
#1    2011-12  20 SAS NBA  SF  64  1534 16.6 0.573 0.270 0.218  7.9 ...
#2    2012-13  21 SAS NBA  SF  58  1810 16.4 0.592 0.331 0.240  4.3 ...
#3    2013-14  22 SAS NBA  SF  66  1923 19.4 0.602 0.282 0.195  4.6 ...
#4    2014-15  23 SAS NBA  SF  64  2033 22.0 0.567 0.234 0.307  4.8 ...
#5    2015-16  24 SAS NBA  SF  72  2380 26.0 0.616 0.267 0.306  4.7 ...
#6    2016-17  25 SAS NBA  SF  74  2474 27.6 0.610 0.295 0.406  3.7 ...
#7    2017-18  26 SAS NBA  SF   9   210 26.0 0.572 0.315 0.342  3.1 ...
#8    2018-19  27 TOR NBA  SF  60  2040 25.8 0.606 0.267 0.377  4.2 ...
#9    2019-20  28 LAC NBA  SF   6   183 35.1 0.572 0.230 0.319  5.5 ...
#10    Career  NA     NBA     473 14587 22.8 0.599 0.276 0.318  4.8 ...
#11            NA              NA    NA   NA    NA    NA    NA   NA ...
#12 7 seasons  NA SAS NBA     407 12364 22.1 0.597 0.279 0.305  4.8 ...
#13  1 season  NA TOR NBA      60  2040 25.8 0.606 0.267 0.377  4.2 ...
#14  1 season  NA LAC NBA       6   183 35.1 0.572 0.230 0.319  5.5 ...