使用 xpath 同时选择属性和内容?

Posted

技术标签:

【中文标题】使用 xpath 同时选择属性和内容?【英文标题】:Select both attribute and content using xpath? 【发布时间】:2018-09-12 01:39:21 【问题描述】:

Xpath //a[contains(@class, 'storylink')]/@* 将提取锚标签的所有属性。我的 xml 中的锚标记没有通常具有链接内容的 title 属性。有没有办法使用 XPATH 1.0 选择 锚链接中的 href 和文本内容

【问题讨论】:

添加源内容的完整示例(完整的 XML 片段)和确切的预期输出。 @DavidEnnis 例如:http://news.ycombinator.com 我正在尝试提取标题和 href。 对不起...我的意思是在您的示例中-不是让某人不得不在网页的来源上四处寻找。使用示例输入和预期输出扩展您的问题.. 【参考方案1】:

只需使用//a[contains(@class, 'storylink')] 选择a 元素本身,然后在返回的元素节点上使用javascript 方法获取所需的属性和/或文本内容。

您确实可以使用 XPath 同时选择属性和文本,但如果它们都在一个查询结果中混杂在一起,那么再次将它们分开会很麻烦。

【讨论】:

对于我的用例,我试图找到一个 XPath 与 Google Sheets =ImportXml() 公式一起使用,该公式直接将提取的值填充到工作表中。即一列中的标题和另一列中的href。【参考方案2】:

如果要在单个 XPath 选择中同时选择 @hreftext(),可以使用联合运算符 |

使用 XPath 1.0,这可能是您能做的最好的事情:

//a[contains(@class, 'storylink')]/@href | //a[contains(@class, 'storylink')]/text()

使用 XPath 2.0(或更高版本),您可以避免重复锚点选择标准:

//a[contains(@class, 'storylink')]/(@href,text())

【讨论】:

以上是关于使用 xpath 同时选择属性和内容?的主要内容,如果未能解决你的问题,请参考以下文章

Xpath同时选取不同属性的元素

xpath

正则表达式、xpath、BeautifulSoup和JSONPath的区别?

dom4j+Xpath的简单路径表达式获取节点元素内容和属性值

Python怎样获取XPath下的A标签的内容

爬虫进阶数据提取-lxml模块(万能操作)