r - 如何从链接列表中抓取 HTML 表格

标签 r web-scraping

我正在尝试使用 XML 包抓取一些表格(选举数据)。浏览 SO,我发现了如何使用以下方法抓取单个 url:

library(XML)
url <- "http://www.elecciones2011.gob.ar/paginas/paginas/dat99/DPR99999A.htm"
total <- readHTMLTable(url)
n.rows <- unlist(lapply(total, function(t) dim(t)[1]))
df<-as.data.frame(total[[which.max(n.rows)]])

通过上面的代码,我得到了一个足够好的结果。我还能够(通过 readLines 函数和一些调整)获得一个包含我想要抓取的所有 url 的向量。像这样:

base_url <- "http://www.elecciones2011.gob.ar/paginas/paginas/"
urls <- paste(
  base_url,
  c(
    "dat02/DPR02999A", 
    "dat03/DPR03999A", 
    "dat04/DPR04999A", 
    "dat05/DPR05999A", 
    "dat06/DPR06999A", 
    "dat07/DPR07999A", 
    "dat08/DPR08999A", 
    "dat09/DPR09999A", 
    "dat10/DPR10999A", 
    "dat11/DPR11999A", 
    "dat12/DPR12999A", 
    "dat13/DPR13999A", 
    "dat14/DPR14999A", 
    "dat15/DPR15999A", 
    "dat16/DPR16999A", 
    "dat17/DPR17999A", 
    "dat18/DPR18999A", 
    "dat19/DPR19999A", 
    "dat20/DPR20999A", 
    "dat21/DPR21999A", 
    "dat22/DPR22999A", 
    "dat23/DPR23999A", 
    "dat24/DPR24999A"
  ),
  ".htm",
  sep = "" 
)

我想做的是创建一个函数,在所有 url 中运行 readHTMLTable 函数,并将结果存储在向量或数据框中(一个或多个,无论哪个更容易)。我是 R 的新手,而且我特别不擅长函数。我试过类似...

tabla<- for (i in urls){
        readHTMLTable(urls)
        }

...但还差得远。

最佳答案

最基本的方法,使用循环。这只是将您提供的代码包装在 for 中。

tabla <- list()
for(i in seq_along(urls))
{
    total <- readHTMLTable(urls[i])
    n.rows <- unlist(lapply(total, function(t) dim(t)[1]))
    tabla[[i]] <- as.data.frame(total[[which.max(n.rows)]])
}

一种更优雅的方法,使用 lapply。现在提供的代码被放入一个函数中,每个 url 都会调用该函数。

tabla <- lapply(urls, function(url) {
    total <- readHTMLTable(url)
    n.rows <- unlist(lapply(total, function(t) dim(t)[1]))
    as.data.frame(total[[which.max(n.rows)]])
})

关于r - 如何从链接列表中抓取 HTML 表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7924409/

相关文章:

javascript - 格式化text()的字符串结果

regex - R:仅当特殊正则表达式条件不匹配时才拆分

VBA HTML 抓取 - 来自复杂表的 '.innertext'

r - 检测或阻止调用不存在的函数的函数定义

r - 如何将R ggplot图形存储为html代码段

javascript - 使用 Mechanize 将 HTML 注入(inject)页面

xml - 使用 Google 表格进行批量图像搜索

html - 如何提取向下滚动时进一步加载的完整表格?

r - 在后台加载 Shiny 的 tabPanel

r - 在 R 或 PostgreSQL 中形成时空接近轨迹组