从多个html文件中提取值

时间:2017-08-02 11:58:37

标签: html r web-scraping rvest

我是网络报道新手。我有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'的方法适用于类“character”的对象

我做错了什么?

要在数据框中提取,我有这段代码

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

提前谢谢。

1 个答案:

答案 0 :(得分:2)

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