【发布时间】:2017-06-29 06:15:19
【问题描述】:
考虑这个页面:
<n1 class="a">
1
</n1>
<n1 class="b">
<b>bold</b>
2
</n1>
如果我首先使用class="a" 选择第一个n1,我应该排除第二个n1,这确实是这样:
library(rvest)
b_nodes = read_html('<n1 class="a">1</n1>
<n1 class="b"><b>bold</b>2</n1>') %>%
html_nodes(xpath = '//n1[@class="b"]')
b_nodes
# {xml_nodeset (1)}
# [1] <n1 class="b"><b>bold</b>2</n1>
但是,如果我们现在使用这个“子集”页面:
b_nodes %>% html_nodes(xpath = '//n1')
# {xml_nodeset (2)}
# [1] <n1 class="a">1</n1>
# [2] <n1 class="b"><b>bold</b>2</n1>
1 节点是如何“重新发现”的??
注意:我知道如何使用两个单独的 xpath 来获得我想要的东西。这是一个关于为什么“子集”没有按预期工作的概念性问题。我的理解是b_nodes 应该完全排除第一个节点——b_nodes 对象甚至不应该知道该节点存在。
【问题讨论】:
-
更简单的说明:
b_nodes %>% html_nodes(xpath = '//n1')。看起来它的设计不是为了链接/始终指向原始对象。 -
@Frank 好点,我想我已经尝试过了,但没有成功。我会编辑它