html - 在 R 中解析 HTML 文件

标签 html r xml html-parsing

我想从网站读取 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”标签的信息,但它还包含许多我不需要的额外代码(如样式信息等)。

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

最佳答案

查看 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"

关于html - 在 R 中解析 HTML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19748130/

相关文章:

html - 未设置宽度的div溢出超出浏览器宽度

linux - 从 R 运行 linux 命令

R:如何在 ggplot2 线图中重新排序图例键以匹配每个系列中的最终值?

PHP XML 使用命名空间从父级获取子变量

java - 我需要使用 Java 中的 DOM 将元素添加到 xml 文件

html - 如何缩小 flex 元素高度以适应容器高度

html - 请求相机权限 Flutter Web

javascript - 数学函数不起作用

r - 我如何在列表中组合 rowise 数据框?

c# - 使用 XElement 追加 XML