2015-10-15 86 views
0

我试图用html_table提取表和rvestrvest html_table

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

,我不断收到一个错误

Error in UseMethod("html_nodes"): no applicable method for 'html_nodes' applied to an object of class "character"

回答

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() 

注:

  • 您使用的是不具有表中的URL是否仍要
  • 你应该正在使用最新的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。如果您计划刮擦所有违规行为,您需要添加随机睡眠延迟。

还请注意,它是倾斜的数据,并非常了解它的局限性,因为你试图使用它(我做数据泄密研究为生)。

+0

非常感谢你,我会对任何其他可能推荐的数据泄露来源感兴趣 –

+0

我实际上建议加入[信息风险分析师协会](http://lists.societyinforisk.org/mailman/listinfo/sira)(它是免费的)和围绕档案(大量的链接)。还有。不过,这取决于你想要完成什么。 – hrbrmstr

+0

嗨,我很快就运行了代码,试图了解它是如何工作的。我对R非常陌生,所以对软件有点挣扎 - 它给了我一个错误错误:期待一个外部指针 来自:eval(expr,envir,enclos) –