【问题标题】:XPath - get text from whole document except text from specified elementsXPath - 从整个文档中获取文本,但来自指定元素的文本除外
【发布时间】:2018-03-13 19:27:42
【问题描述】:

我试图弄清楚如何使用XPath 获取文本并排除一些标签。

假设(为了说明)我想从该页面的 body 标记中获取所有文本(所以所有可见文本),但我不希望我的文本包含来自 class="comcopy" 标记的文本,即我不'不希望文本包含 cmets。

我试过这个,但它不起作用。它返回包含 cmets 的文本。

//body//text()[not(*[contains(@class,"comcopy")])]

你有什么想法吗?

编辑:

可能想通了,但也许有更好或更快的方法,所以我不会删除问题。

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

【问题讨论】:

  • 测试不应出现在提取文本中的评论。

标签: html parsing xpath web-scraping


【解决方案1】:

你们很亲密。

只是改变

//body//text()[not(*[contains(@class,"comcopy")])]

//body//text()[not(contains(../@class,"comcopy"))]

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

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

【讨论】:

  • 对不起,如果我不清楚。是的,我想排除元素内的所有文本及其后代。
猜你喜欢
  • 2017-12-09
  • 1970-01-01
  • 2015-01-03
  • 2021-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-13
  • 2022-12-18
相关资源
最近更新 更多