首页 > 解决方案 > 在R中获取html网站时如何保存for循环的结果?

问题描述

我想知道如何在 R 中抓取多个网站时如何从 for 循环中存储和检索数据。

library(rvest)
library(dplyr)
library(tidyverse)
library(glue)

cont<-rep(NA,101)

countries <- c("au","at","de","se","gb","us")

for (i in countries) {
sides<-glue("https://www.beeradvocate.com/beer/top-rated/",i,.sep = "") 
html <- read_html(sides)
cont[i] <- html %>% 
  html_nodes("table") %>% html_table()
}

table_au <- cont[2] [[1]]

这个想法是分别为每个网站获取一个列表。如果我运行我的代码,table_au 只会显示 NA,大概是因为没有存储循环结果。

如果有人可以帮助我,那就太棒了。

BR,

马可

标签: rlistfor-loopweb-scraping

解决方案


我们可以提取列表中的所有表。

library(rvest)

url <- "https://www.beeradvocate.com/beer/top-rated/"
temp <- purrr::map(paste0(url, countries), ~{
          .x %>% 
           read_html() %>%
           html_nodes("table") %>% 
           html_table(header = TRUE) %>% .[[1]]
})

如果您希望将数据作为不同的数据框,例如tab_au, tab_at,我们可以命名列表并用于list2env分别获取数据。

names(temp) <- paste0('tab_', countries)
list2env(temp, .GlobalEnv)

推荐阅读