【问题标题】:R - Scraping with rvest packageR - 使用 rvest 包进行抓取
【发布时间】:2018-10-13 06:05:52
【问题描述】:

我正在尝试从此网页上的“团队统计”表中获取数据:

https://www.hockey-reference.com/teams/CGY/2010.html

我在网络抓取方面没有太多经验,但已经尝试过使用 XML 包,现在使用 rvest 包:

library(rvest)

url <- html("https://www.hockey-reference.com/teams/CGY/2010.html")

url %>%
        html_node(xpath = "//*[@id='team_stats']") 

最终得到一个看起来像单个节点的东西:

{xml_node}
<table class="sortable stats_table" id="team_stats" data-cols-to-freeze="1">
[1] <caption>Team Statistics Table</caption>
[2] <colgroup>\n<col>\n<col>\n<col>\n<col>\n<col>\n<col>\n<col>\ ...
[3] <thead><tr>\n<th aria-label="Team" data-stat="team_name" sco ...
[4] <tbody>\n<tr>\n<th scope="row" class="left " data-stat="team ...

我如何解析这个以获得两行表中的标题和信息?

【问题讨论】:

    标签: r xml web-scraping rvest


    【解决方案1】:

    你只需要在链尾添加html_table

    library(rvest)
    
    url <- read_html("https://www.hockey-reference.com/teams/CGY/2010.html")
    
    url %>%
      html_node(xpath = "//*[@id='team_stats']") %>% 
      html_table()
    

    或者:

    library(rvest)
    
    url %>%  
      html_table() %>% 
      .[[1]]
    

    两种解决方案都返回:

                Team AvAge GP  W  L OL PTS  PTS%  GF  GA   SRS  SOS TG/G PP PPO   PP% PPA PPOA   PK% SH SHA    S  S%   SA   SV%   PDO
    1 Calgary Flames  28.8 82 40 32 10  90 0.549 201 203 -0.03 0.04 5.05 43 268 16.04  54  305 82.30  7   1 2350 8.6 2367 0.916 100.1
    2 League Average  27.9 82 41 31 10  92 0.561 233 233  0.00 0.00 5.68 56 304 18.23  56  304 81.77  6   6 2486 9.1 2479 0.911    NA
    

    【讨论】:

    • 谢谢!注意:第一个解决方案返回一个数据框开始,备用解决方案只返回表的第一列,因为带有索引的点占位符。不过,我并不是在抱怨。
    • 嗯,替代解决方案 (.[1]) 为我返回表列表中的第一个元素。不只是第一列。无论如何,我已经更新了我的答案以使用.[[1]],因为此时我们不需要列表,我们只对第一个表感兴趣,如果我们要从列表。
    猜你喜欢
    • 2018-02-15
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    • 1970-01-01
    • 2019-10-11
    相关资源
    最近更新 更多