我使用Nokogiri解析具有相同内容的html页面:
<p class="parent">
Useful text
<br>
<span class="child">Useless text</span>
</p>
当我调用方法page.css('p.parent').text
时,Nokogiri会返回'有用的文字无用文字'。但我只需要'有用的文字'。
如何在没有孩子的情况下获取节点文本?
答案 0 :(得分:27)
XPath包含用于选择文本节点的text()
节点测试,因此您可以这样做:
page.xpath('//p[@class="parent"]/text()')
如果相关元素可能属于多个类,则使用XPath选择HTML类会变得相当棘手,因此这可能不太理想。
幸运的是,Nokogiri将text()
选择器添加到CSS中,因此您可以使用:
page.css('p.parent > text()')
获取p.parent
的直接子节点的文本节点。这也会返回一些只有空格的节点,因此您可能需要将它们过滤掉。
答案 1 :(得分:-1)
您应该可以使用page.css('p.parent').children.remove
。
然后您的page.css('p.parent').text
将返回没有子节点的文本。
注意:page
将修改remove