如何使用rvest获取html_table中的链接?

时间:2017-02-08 17:31:33

标签: r rvest

library("rvest")
url <- "myurl.com"
tables<- url %>%
      read_html() %>%
      html_nodes(xpath='//*[@id="pageContainer"]/table[1]') %>%
      html_table(fill = T)
tables[[1]]

单元格的html内容是这样的

<td><a href="http://somelink.com" target="_blank">Click Here</a></td>

但是在scped html中我只能得到,

  

点击这里

2 个答案:

答案 0 :(得分:6)

您可以使用rvest::html_table编辑trace来处理此问题。

现有行为示例:

library(rvest)
x <- "https://en.wikipedia.org/wiki/Academy_Award_for_Best_Picture" %>% 
  read_html() %>% 
  html_nodes("#mw-content-text > table:nth-child(55)")

html_table(x)
#[[1]]
#                         Film   Production company(s)                         Producer(s)
#1          The Great Ziegfeld     Metro-Goldwyn-Mayer                      Hunt Stromberg
#2             Anthony Adverse            Warner Bros.                        Henry Blanke
#3                   Dodsworth Goldwyn, United Artists  Samuel Goldwyn and Merritt Hulbert
#4                Libeled Lady     Metro-Goldwyn-Mayer                 Lawrence Weingarten
#5      Mr. Deeds Goes to Town                Columbia                         Frank Capra
#6            Romeo and Juliet     Metro-Goldwyn-Mayer                     Irving Thalberg
#7               San Francisco     Metro-Goldwyn-Mayer   John Emerson and Bernard H. Hyman
#8  The Story of Louis Pasteur            Warner Bros.                        Henry Blanke
#9        A Tale of Two Cities     Metro-Goldwyn-Mayer                   David O. Selznick
#10          Three Smart Girls               Universal Joe Pasternak and Charles R. Rogers

html_table本质上提取html表的单元格并在其上运行html_text。我们需要做的就是从每个单元格中提取<a>标记并改为运行html_attr(., "href")来替换它。

trace(rvest:::html_table.xml_node, quote({ 
  values      <- lapply(lapply(cells, html_node, "a"), html_attr, name = "href")
  values[[1]] <- html_text(cells[[1]])
}), at = 14)

新行为:

html_table(x)
#Tracing html_table.xml_node(X[[i]], ...) step 14 
#[[1]]
#                                     Film Production company(s)                    Producer(s)
#1                /wiki/The_Great_Ziegfeld                    NA           /wiki/Hunt_Stromberg
#2                   /wiki/Anthony_Adverse                    NA             /wiki/Henry_Blanke
#3                  /wiki/Dodsworth_(film)                    NA           /wiki/Samuel_Goldwyn
#4                      /wiki/Libeled_Lady                    NA      /wiki/Lawrence_Weingarten
#5            /wiki/Mr._Deeds_Goes_to_Town                    NA              /wiki/Frank_Capra
#6      /wiki/Romeo_and_Juliet_(1936_film)                    NA          /wiki/Irving_Thalberg
#7         /wiki/San_Francisco_(1936_film)                    NA /wiki/John_Emerson_(filmmaker)
#8        /wiki/The_Story_of_Louis_Pasteur                    NA             /wiki/Henry_Blanke
#9  /wiki/A_Tale_of_Two_Cities_(1935_film)                    NA        /wiki/David_O._Selznick
#10                /wiki/Three_Smart_Girls                    NA            /wiki/Joe_Pasternak

答案 1 :(得分:0)

如果您想获得“href”标签的值,请使用:

//*[@id="pageContainer"]/table[1]//@href

我在http://xpather.com/RtnrY9fh(xpath online)上测试了这个。