r - 在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,
马可
解决方案
我们可以提取列表中的所有表。
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)
推荐阅读
- command-line-interface - IBM Cloud: How to find region identifier for location name?
- python - 如果文件夹不存在,则添加文件夹,并在 Python 中的 Google Drive 中添加文件
- android - Cannot resolve constructor TimePickerDialog
- c# - 十进制和双精度值解析为零
- oauth - 无法为三星 SmartThings 云到云集成实施 OAuth
- android - 深度链接使用 Launch Activity 而不是 Deep Linking Activity 不一致地打开应用程序
- swift - 导致错过布局的核心数据
- sql - 如何在 SQL 中使用伪列更新列值
- database - 我在 Laravel 中有一个 PDO 连接失败
- android - 如何检查 ROOM 数据库中的记录是否被删除?