我有一个系列在其仅有的一列URL的1列数据帧(可以是载体一样的)。对于这个例子的目的,我们将保持每个URL相同:
urls<-as.data.frame(c("https://en.wikipedia.org/wiki/List_of_counties_in_California", "https://en.wikipedia.org/wiki/List_of_counties_in_California","https://en.wikipedia.org/wiki/List_of_counties_in_California"))
colnames(urls)<-"col1"
urls$col1<-as.character(urls$col1)
我也有我写一个函数,擦伤从这些网址的表格:
wiki_scrape <- function(x){
x_url <- x %>%
read_html() %>%
html_nodes(xpath='//*[@id="mw-content-text"]/div/table[2]') %>%
html_table() %>%
.[[1]] %>%
select(County)
return(x_url)
}
wiki_scrape(urls[1,1])
的结果是58个观察一个数据帧。我想以迭代的方式在整个矢量wiki_scrape
(而不仅仅是urls
)运行此函数urls[1,1]
并追加每个结果数据框到以前的数据帧产生。在这个例子中,具有urls
列出3个网址所以想要我的所得数据帧是174个观测长(3 * 58 = 174 58是一个数据帧的长度使用wiki_scrape
刮下)。
你可以这样做
library(dplyr)
map(urls$col1, wiki_scrape) %>% bind_rows()
# County
#1 Alameda County
#2 Alpine County
#3 Amador County
#4 Butte County
#5 Calaveras County
#6 Colusa County
#....
我们可以从map_df
使用purrr
library(purrr)
out <- map_df(urls$col1, wiki_scrape)
head(out)
# County
#1 Alameda County
#2 Alpine County
#3 Amador County
#4 Butte County
#5 Calaveras County
#6 Colusa County