在 XPath 中获取(文本)

Posted

技术标签:

【中文标题】在 XPath 中获取(文本)【英文标题】:Get (text) in XPath 【发布时间】:2011-07-24 03:07:40 【问题描述】:

我有以下 DOM 结构/html,我想获取(只是练习......)标记的数据。

在 h2 元素下的那个。那个 div[@class="coordsAgence"] 元素,下面有更多的 div 子元素和更多的 h2 .. 这样做:

div[@class="coordsAgence"]

将获得该值,但带有额外的不需要的文本。 更新:我基本上想要的值(来自此示例)是:“GALLIER Dennis”文本。

【问题讨论】:

图片真的帮不上什么忙。当人们建立答案时,简化的文本版本会更有用。 投反对票。代码作为截图,一点都不好看。 【参考方案1】:

您似乎想要该 div 中的第一个文本节点:

div[@class="coordsAgence"]/text()[1]

应该这样做。

请注意,这假定<div class="coordsAgence"> 内的这些 cmets 之间实际上没有空格;否则,空格将构成您必须考虑的其他文本节点。

【讨论】:

【参考方案2】:

获取div 中第一个h2 之后的第一个文本节点,类为"coordsAgence"

div[@class='coordsAgence']/h2[1]/following-sibling::text()[1]

请注意,第一个表达式返回第一个 h2 之后的第一个文本节点,即使在两者之间出现了其他节点。如果您只想在它是立即跟随第一个h2的节点时返回文本,那么尝试这样的操作:

div[@class='coordsAgence']/h2[1][following-sibling::node()[1][self::text()]]/following-sibling::text()[1]

【讨论】:

【参考方案3】:

使用 Python/Scrapy 从 h1 标签中获取文本(例如):

response.xpath(
        "//div[contains(@class, 'class_name')]//h1[contains(@class, 'class_name')]/text()"
    ).get()

【讨论】:

以上是关于在 XPath 中获取(文本)的主要内容,如果未能解决你的问题,请参考以下文章

无法在 xpath 中获取文本(lxml/python)

使用 XPath 在使用 python 的 <td> 单元格中获取文本

selumium 中 xpath获取文本属性正确写法

使用 Xpath (HtmlXPathSelector) 获取父子文本

如果它是使用 XPath 在 Scrapy 中的其他节点的父节点,如何从子节点获取文本

Xpath获取两个a标签之间p内的所有文本