我正在尝试提取类似于以下内容的表的所有链接:
<!DOCTYPE html>
<html>
<body>
<table>
<tr>
<td>
<a href="https://www.r-project.org/">R</a><br>
<a href="https://www.rstudio.com/">RStudio</a>
</td>
</tr>
<tr>
<td>
<a href="https://community.rstudio.com/">Rstudio Community</a>
</td>
</tr>
</table>
</body>
</html>
我想要做的是在结尾处获取数据帧(或向量)列表,其中每个数据帧包含html表中每行的所有链接。例如,在这种情况下,列表将具有带有c("https://www.r-project.org/","https://www.rstudio.com/")
的向量1,而第二个向量将是c("https://community.rstudio.com/")
。我现在遇到的主要问题是,当我执行以下操作时,我无法保持每个节点的href关系:
library(rvest)
web <- read_html("table.html") %>%
html_nodes("table") %>%
html_nodes("tr") %>%
html_nodes("a") %>%
html_attr("href")
答案 0 :(得分:1)
一种方法是添加用"a"
替换html_node
字词的搜索,这将生成每个tr
中仅第一个网址的列表。然后,您可以使用它将完整列表拆分为组。
page <- read_html("table.html") #just read the html once
web <- page %>%
html_nodes("table") %>% html_nodes("tr") %>% html_nodes("a") %>%
html_attr("href") #as above
web2 <- page %>%
html_nodes("table") %>% html_nodes("tr") %>% html_node("a") %>%
html_attr("href") #just the first url in each tr
webdf <- data.frame(web=web, #full list
group=cumsum(web %in% web2), #grouping indicator by tr
stringsAsFactors=FALSE)
webdf
web group
1 https://www.r-project.org/ 1
2 https://www.rstudio.com/ 1
3 https://community.rstudio.com/ 2