【发布时间】:2018-05-10 12:35:55
【问题描述】:
我想用html_node做一个循环来捕捉一些节点的值(节点没有文本),也就是我有一些值
library(rvest)
country <- c("Canada", "US", "Japan", "China")
使用这些值(“Canada”,“us”,...),我完成了一个循环,通过将每个值粘贴到“https://en.wikipedia.org/wiki/”来创建一个 URL,之后,每个新的 html 应用 read_html (i) 和一系列代码最终用 html_nodes ('a.page-link') 捕获一个节点 - 是的!一个节点,而不是文本,并将 html_nodes (...) 作为.character 保存在 data.frame 中(或者可以是列表)。
dff<- NULL
for ( i in country ) {
url<-paste0("https://en.wikipedia.org/wiki/",i)
page<- read_html(url)
b <- page%>%
html_nodes ('h2.flow-title') %>%
html_nodes ('a.page-link') %>%
as.character()
dff<- data.frame(b)
}
问题是这段代码只保存了上一个国家的数据,即运行第一个国家并获取html_nodes(保存它),但是当运行下一个国家时,第一个数据被删除并替换为这个新的,依此类推,最终结果只是来自最后一个国家的数据。 我会很感激你的帮助!
【问题讨论】:
-
您只能获得最后一个值,因为您的
b值在每次迭代中不断被覆盖,而dff<- data.frame(b)实际上并未将b附加到数据帧中。你对输出有什么期望?从您的代码看来,您似乎从每次迭代中获得了一个字符串,为什么不将字符向量作为最终输出?