使用 XML 包通过 id 和 class 解析 HTML 元素
Parsing HTML elements by id and class with XML package
是否可以通过 id
和 class
信息从 HTMLInternalDocument
对象中提取元素?例如让我们拿一个文件:
<!DOCTYPE html>
<html>
<head>
<title>R XML test</title>
</head>
<body>
<div id="obj1">
<p id="txt1">quidquid</p>
<p id="txt2">Latine dictum</p>
</div>
<div class="mystuff">
<p>sit altum</p>
<p>videtur</p>
</div>
</body>
</html>
并读入R如下:
require(XML)
file <- "C:/filepath/index.html"
datain <- htmlTreeParse(readLines(file), useInternalNodes = TRUE)
我想提取元素 id='txt2'
和 class='mystuff'
的内容。
我试过各种方法都没有成功,而且好像都是在树下迭代,很费力。有使用class/id的快捷方式吗?我有一个想法,它可能涉及首先使用 getNodeSet
,然后使用一些应用方法(例如 xmlApply
& xmlAttrs
),但我尝试过的任何方法都不起作用。感谢任何指点。
试试这个例子:
id_or_class_xp <- "//p[@id='txt2']//text() | //div[@class='mystuff']//text()"
xpathSApply( doc,id_or_class_xp,xmlValue)
[1] "Latine dictum" "\n " "sit altum" "\n " "videtur" "\n"
文档在哪里:
doc <- htmlParse('<!DOCTYPE html>
<html>
<head>
<title>R XML test</title>
</head>
<body>
<div id="obj1">
<p id="txt1">quidquid</p>
<p id="txt2">Latine dictum</p>
</div>
<div class="mystuff">
<p>sit altum</p>
<p>videtur</p>
</div>
</body>
</html>',asText=T)
是否可以通过 id
和 class
信息从 HTMLInternalDocument
对象中提取元素?例如让我们拿一个文件:
<!DOCTYPE html>
<html>
<head>
<title>R XML test</title>
</head>
<body>
<div id="obj1">
<p id="txt1">quidquid</p>
<p id="txt2">Latine dictum</p>
</div>
<div class="mystuff">
<p>sit altum</p>
<p>videtur</p>
</div>
</body>
</html>
并读入R如下:
require(XML)
file <- "C:/filepath/index.html"
datain <- htmlTreeParse(readLines(file), useInternalNodes = TRUE)
我想提取元素 id='txt2'
和 class='mystuff'
的内容。
我试过各种方法都没有成功,而且好像都是在树下迭代,很费力。有使用class/id的快捷方式吗?我有一个想法,它可能涉及首先使用 getNodeSet
,然后使用一些应用方法(例如 xmlApply
& xmlAttrs
),但我尝试过的任何方法都不起作用。感谢任何指点。
试试这个例子:
id_or_class_xp <- "//p[@id='txt2']//text() | //div[@class='mystuff']//text()"
xpathSApply( doc,id_or_class_xp,xmlValue)
[1] "Latine dictum" "\n " "sit altum" "\n " "videtur" "\n"
文档在哪里:
doc <- htmlParse('<!DOCTYPE html>
<html>
<head>
<title>R XML test</title>
</head>
<body>
<div id="obj1">
<p id="txt1">quidquid</p>
<p id="txt2">Latine dictum</p>
</div>
<div class="mystuff">
<p>sit altum</p>
<p>videtur</p>
</div>
</body>
</html>',asText=T)