rvest html_table

时间:2015-10-15 09:59:35

标签: r html-table rvest

我正在尝试使用html_tablervest

提取表格
library(rvest)
test <- html("http://www.privacyrights.org/data-breach/new?title=")
test %>% html_table(html_nodes("table.data-breach-table")[[1]])

然而,我一直收到错误

  

UseMethod中的错误(&#34; html_nodes&#34;):没有适用的方法   &#39; html_nodes&#39;应用于类&#34;字符&#34;

的对象

1 个答案:

答案 0 :(得分:1)

如果你打算嵌套带括号的电话,为什么还要用管道来打扰?

html_table(html_nodes(test, "table.data-breach-table")[[1]])

否则请使用完整管道并使用magrittr

library(magrittr)

test %>% 
  html_nodes("table.data-breach-table") %>% 
  extract2(1) %>%
  html_table()

注:

  • 您正在使用的网址没有您想要的表格
  • 您应该使用最新的rvest并使用read_html

至于它为什么不起作用,你错误地管道testhtml_nodes正在table…字符串上运行而不是它期望的解析HTML文档。

既然你正试图破坏漏洞,这可能会有所帮助:

library(rvest)
library(dplyr)
library(pbapply)

urls <- sprintf("http://www.privacyrights.org/data-breach?title=&page=%d", 1:94)

pblapply(urls, function(URL) {

  pg <- read_html(URL)

  tab <- html_nodes(pg, "table")[3]
  rows <- html_nodes(tab, "tr:not(.data-breach-bottom)")

  bind_rows(lapply(seq(2, length(rows)-2, by=2), function(i) {

    tds_1 <- html_nodes(rows[i], "td")
    tds_2 <- html_text(html_nodes(rows[i+1], "td"), trim=TRUE)

    data_frame(date_public=html_text(tds_1[1], TRUE),
               name_loc=html_text(tds_1[2], TRUE),
               entity=html_text(tds_1[3], TRUE),
               type=html_text(tds_1[4], TRUE),
               recs=html_text(tds_1[5], TRUE),
               descr=tds_2[1])

  }))

}) -> things

它来自我的gitst。如果您计划刮除所有违规行为,则需要为此添加随机睡眠延迟。

另请注意,数据偏差并且在您尝试使用数据时非常清楚它的局限性(我以数据泄露研究为生)。