XPath - 从整个文档中获取文本,但指定元素的文本除外

时间:2018-03-13 19:27:43

标签: html parsing xpath web-scraping

我正在尝试弄清楚如何使用XPath获取文字并排除某些标签。

让我们说(为了说明)我想从此页面的body标记中获取所有文字(因此所有可见文字),但我不希望我的文字包含class="comment-copy"标签中的文字即我不希望文本包含评论。

我尝试了这个,但它不起作用。它返回包含注释的文本。

//body//text()[not(*[contains(@class,"comment-copy")])]

你有什么想法吗?

修改

可能已经弄明白了,但也许有更好或更快的方法,所以我不会删除这个问题。

//body//text()[not(ancestor-or-self::*[contains(@class,"comment-copy")])]

1 个答案:

答案 0 :(得分:1)

你非常接近。

只需更改

//body//text()[not(*[contains(@class,"comment-copy")])]

//body//text()[not(contains(../@class,"comment-copy"))]

请注意,这只会排除text()个标记元素的直接子comment-copy个节点。您的后续XPath将排除text()个标记元素下的所有后代comment-copy个节点。

注意:您可能希望加强@class测试的稳健性;见Xpath: Find element with class that contains spaces