R和xpathApply——从嵌套的html标记中删除重复项
为了简洁明了,我编辑了这个问题 我的目标是找到将导致“test1”…“test8”单独列出的XPath表达式 我正在使用R和xpathApply——从嵌套的html标记中删除重复项,r,xpath,rcurl,R,Xpath,Rcurl,为了简洁明了,我编辑了这个问题 我的目标是找到将导致“test1”…“test8”单独列出的XPath表达式 我正在使用xpathApply从网页中提取文本。由于将从中提取信息的各种不同页面的布局,我需要从所有和html标记中提取XML值。我遇到的问题是,当一种类型嵌套在另一种类型中时,当我使用以下带有或条件的xpathApply表达式时,会导致部分重复 require(XML) html <- '<!DOCTYPE html> <html lang="
xpathApply
从网页中提取文本。由于将从中提取信息的各种不同页面的布局,我需要从所有
和
html标记中提取XML值。我遇到的问题是,当一种类型嵌套在另一种类型中时,当我使用以下带有或条件的xpathApply
表达式时,会导致部分重复
require(XML)
html <-
'<!DOCTYPE html>
<html lang="en">
<body>
<p>test1</p>
<font>test2</font>
<p><font>test3</font></p>
<font><p>test4</p></font>
<p>test5<font>test6</font></p>
<font>test7<p>test8</p></font>
</body>
</html>'
work <- htmlTreeParse(html, useInternal = TRUE, encoding='UTF-8')
table <- xpathApply(work, "//p|//font", xmlValue)
table
require(XML)
html好吧,我想出来了(完全是因为这篇文章:)
对我来说,答案是只提取html中的任何文本,并清除一些不需要的内容,如:
table <- xpathApply(work, "//text()[not(ancestor::script)][not(ancestor::style)][not(ancestor::noscript)]", xmlValue)
table看起来这可能有用
xpathSApply(work, "//body//node()[//p|//font]//text()", xmlValue)
# [1] "test1" "test2" "test3" "test4" "test5" "test6" "test7" "test8"
只需切换到xpathApply
即可查看列表结果。我们也可以使用getNodeSet
getNodeSet(work, "//body//node()[//p|//font]//text()", fun = xmlValue)
# [[1]]
# [1] "test1"
#
# [[2]]
# [1] "test2"
#
# [[3]]
# [1] "test3"
#
# [[4]]
# [1] "test4"
#
# [[5]]
# [1] "test5"
#
# [[6]]
# [1] "test6"
#
# [[7]]
# [1] "test7"
#
# [[8]]
# [1] "test8"