【问题标题】:Scrape a URL with several tables with Rvest使用 Rvest 抓取包含多个表的 URL
【发布时间】:2019-11-06 07:32:11
【问题描述】:

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

当我尝试加载信息时,我所能得到的只是第一个表。我的意思是,当我使用谷歌浏览器进行检查时,我看到表中的数字标记为 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]" , "")

我看到的是 read 是一个包含 351 个值的列表。好的,那就是他检测到了 351 个标记为正确的值。如果我得到最后一个,read2[351],我会看到“29.3”,这是第一个表的最后一个值。

那么...我怎样才能获得有关其他表的信息?我从来没有告诉 R 得到第一个表,我想我会得到所有表的所有信息,我的下一步是以某种方式过滤“高级”表值。

问候

【问题讨论】:

    标签: r web-scraping rvest


    【解决方案1】:

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

    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 ...
    

    【讨论】:

    • 好的,明白了。那么在某些 cmets 之后的每个表都被隐藏了?
    • 是的,该页面的 cmets 中有很多表格。您需要找到表的 id 并在第二个 html_nodes 中使用它来代替 #advanced 来获取任何其他表。
    猜你喜欢
    • 2020-06-08
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多