在 R 中解析 HTML 文件

Posted

技术标签:

【中文标题】在 R 中解析 HTML 文件【英文标题】:Parsing HTML file in R 【发布时间】:2013-11-13 21:57:51 【问题描述】:

我想从网站读取 html 文件。具体来说,我想阅读来自 gutenberg.org 的 HTML 格式的书籍。每章的标题用标签“h2”标记,每章的内容在“h2”之后的段落标签“p”中。使用包 XML,我可以获得每个标签的值或完整的 HTML 代码。

这是一个使用 George Elliot 的 Middlemarch 的示例代码:

library(XML)

doc.html = htmlTreeParse('http://www.gutenberg.org/files/145/145-h/145-h.htm',
                         useInternal = TRUE)
doc.value <- xpathApply(doc.html, '//h2|//p', xmlValue)
doc.html.value <- xpathApply(doc.html, '//h2|//p')

doc.value 包含一个列表,其中每个元素都是标签的内容,但我不知道是 h2 标签还是 p 标签。另一方面, doc.html.value 包含一个列表,其中包含每个标记的 html 代码。这为我提供了它是“h2”还是“p”标签的信息,但它还包含许多我不需要的额外代码(如样式信息等)。

我的问题:有没有一种简单的方法可以只获取标签的类型和标签的值,而不需要其他相关信息?

【问题讨论】:

【参考方案1】:

查看xmlValue 的文档表明还有另一个名为xmlName 的函数,它仅提取标签的名称。使用这两个,可以计算出你想要的:

doc.html.name.value <- xpathApply(doc.html, '//h2|//p', function(x)  list(name=xmlName(x), content=xmlValue(x)); )

> doc.html.name.value[[1]]
$name
[1] "h2"

$content
[1] "\r\nGeorge Eliot\r\n"

【讨论】:

以上是关于在 R 中解析 HTML 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 R 中解析复杂的 csv 文件?

ngspice源码阅读笔记--cir文件解析

linux ls -l命令结果含义解析

如何在 R 中解析具有堆叠多个 JSON 的文件?

python 文件的读写

使用 R 解析出 Surveymonkey csv 文件