Извлечение значений <tr> из нескольких файлов HTML

Я новичок в веб-слом. У меня более 3000 файлов html/htm, и мне нужно извлечь из них значения "tr" и преобразовать их в массив данных, чтобы провести дальнейший анализ.

Коды, которые я использовал, это:

html <- list.files(pattern="\\.(htm|html)$")

mydata <- lapply(html,read_html)%>%
html_nodes("tr")%>%
html_text()

Ошибка в UseMethod("xml_find_all"): не применим метод для xml_find_all, примененный к объекту класса "персонаж"

Что я делаю не так?

Чтобы извлечь в dataframe, у меня есть этот код

u <- as.data.frame(matrix(mydata,byrow = TRUE),stringsAsFactors = FALSE)

Заранее спасибо.

1 ответ

Решение

lapply выведет список документов. Это не может быть обработано read_html, Вместо этого включите все rvest действия в lapply:

html <- list.files(pattern="\\.(htm|html)$")

mydata <- lapply(html, function(file) {
  read_html(file) %>% html_nodes('tr') %>% html_text()
})

пример

Наличие двух тестовых файлов в моем WD с контентом

<html>
  <head></head>
  <body>
    <table>
      <tr><td>Martin</td></tr>
    </table>
  </body>
</html>

а также

<html>
  <head></head>
  <body>
    <table>
      <tr><td>Carolin</td></tr>
    </table>
  </body>
</html>

будет выводить

> mydata
[[1]]
[1] "Martin"

[[2]]
[1] "Carolin"

В моем случае я мог бы отформатировать его с помощью

data.frame(Content = unlist(mydata))
Другие вопросы по тегам