rvest html_table

Я пытаюсь извлечь таблицу с помощью html_table и пакета rvest

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

однако я продолжаю получать сообщение об ошибке

Ошибка в UseMethod ("html_nodes"): нет применимого метода для "html_nodes", примененного к объекту класса "character"


person R_beginner_121    schedule 15.10.2015    source источник


Ответы (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

Что касается того, почему это не сработало, вы test неправильно подключили конвейер, и html_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. Вам нужно будет добавить к этому случайную задержку сна, если вы планируете очистить все их нарушения.

ОБРАТИТЕ ВНИМАНИЕ также, что это искаженные данные, и помните об их ограничениях, когда вы пытаетесь их использовать (я зарабатываю на жизнь исследованием утечки данных).

person hrbrmstr    schedule 15.10.2015
comment
Большое спасибо, мне были бы интересны любые другие источники утечки данных, которые вы могли бы порекомендовать - person R_beginner_121; 15.10.2015
comment
Я бы действительно рекомендовал присоединиться к Обществу аналитиков информационных рисков (это бесплатно) и искать вокруг архивов (много ссылок). Также есть ‹vcdb.org›. Однако многое зависит от того, чего вы пытаетесь достичь. - person hrbrmstr; 15.10.2015
comment
Привет, я быстро запустил код, чтобы попытаться понять, как он работает. Я очень новичок в R, поэтому немного борюсь с программным обеспечением - это дало мне ошибку Ошибка: ожидание внешнего указателя Вызывается из: eval (expr, envir, enclos) - person R_beginner_121; 15.10.2015
comment
Также есть не очень секретный URL, который предоставляет CSV всех, кроме самых последних нарушений (это уродливый CSV, тем не менее) - person hrbrmstr; 15.10.2015
comment
соскоб сломался из-за изменения формата на их конце. блок кода теперь работает. - person hrbrmstr; 03.12.2015