我正在尝试对期刊文章元数据(标题,作者,摘要等)进行一些网络抓取。我有一个页面列表,我需要导航,每个页面都有我需要的信息(除了列表中的目录页面)。我构建了一个功能,将页面的每个部分拼凑成一个列表,我试图遍历每个页面,最后得到我的结果的数据框。
这就是我所拥有的:
article.links <- c("http://onlinelibrary.wiley.com/doi/10.1002/jee.20116/abstract",
"http://onlinelibrary.wiley.com/doi/10.1002/jee.20120/abstract",
"http://onlinelibrary.wiley.com/doi/10.1002/jee.20117/abstract"
)
pager <- function(page) {
new.row = vector("list", 4)
page <- read_html(page)
#DOI
new.row[1] <- page %>%
html_node("#doi") %>%
html_text()
#Title
new.row[2] <- page %>%
html_node(".mainTitle") %>%
html_text()
#Authors
new.row[3] <- page %>%
html_node("#authors") %>%
html_text()
#Abstract
new.row[4] <- page %>%
html_node("#abstract") %>%
html_text()
return(unlist(new.row))
}
当我运行pager.test(article.links.test[1])
时,结果就是我期望的1个条目。我不太确定如何使用一系列结果构建数据框。我尝试使用rbind的for循环将行放在一起,但是当我尝试所有行时,它会抛出有关正在生成的条目的错误:
#This is what doesn't seem to work
abstracts <- data.frame()
for(key in 1:length(article.links.test)) {
abstracts <- rbind(abstracts2, pager.test(article.links.test[key]))
}
如何从列表中的每个页面中抓取元素并将结果合并为数据框?
答案 0 :(得分:2)
您可以使用lapply
然后使用rbind
行
options(stringsAsFactors=F)
library(rvest)
article.links <- c("http://onlinelibrary.wiley.com/doi/10.1002/jee.20116/abstract",
"http://onlinelibrary.wiley.com/doi/10.1002/jee.20120/abstract",
"http://onlinelibrary.wiley.com/doi/10.1002/jee.20117/abstract"
)
pager <- function(page) {
doc <- read_html(url(page))
data.frame(DOI=doc %>% html_node("#doi") %>% html_text(),
Title=doc %>% html_node(".mainTitle") %>% html_text(),
Authors=doc %>% html_node("#authors") %>% html_text(),
Abstract=doc %>% html_node("#abstract") %>% html_text())
}
ans <- do.call(rbind, lapply(article.links, pager))
str(ans)