首页 > 解决方案 > 将大量 html 表读入 R

问题描述

我正在尝试将 html 数据表拉入单个数据框中,并且正在寻找一个优雅的解决方案。有 255 个表,并且 url 因两个变量而异:Year 和 Aldermanic District。我知道必须有一种方法可以使用 for 循环或其他东西,但我很难过。

我已经通过使用单独的代码行读取每个表来成功导入数据,但这会导致每个表都有一行,并且再次有 255 个表。

library(XML)
data <- bind_rows(readHTMLTable("http://assessments.milwaukee.gov/SalesData/2018_RVS_Dist14.htm", skip.rows=1),
                   readHTMLTable("http://assessments.milwaukee.gov/SalesData/2017_RVS_Dist14.htm", skip.rows=1),
                   readHTMLTable("http://assessments.milwaukee.gov/SalesData/2016_RVS_Dist14.htm", skip.rows=1),
                   readHTMLTable("http://assessments.milwaukee.gov/SalesData/2015_RVS_Dist14.htm", skip.rows=1),

理想情况下,我可以使用for循环或其他东西,这样我就不必readHTMLTable为每个表手动编写函数代码。

标签: rweb-scrapingxml-parsing

解决方案


您可以尝试创建一个包含所有要抓取的 URL 的向量,然后使用循环遍历这些输入for

url1 <- "http://assessments.milwaukee.gov/SalesData/"
url2 <- "_RVS_Dist"
years <- c(2015:2018)
dist <- c(1:15)
urls <- apply(expand.grid(paste0(url1, years), paste0(url2, dist)), 1, paste, collapse="")
data <- NULL
for (url in urls) {
    df <- readHTMLTable(url)
    data <- rbind(data, df)
}

推荐阅读