【问题标题】:XPath for text following link?链接后的文本的 XPath?
【发布时间】:2019-10-18 15:24:29
【问题描述】:

您能帮我为下面的 HTML 编写一个相对 XPath,以根据链接 'Emp' 获取 para 文本 'You are an employer'

<div class = "dummy">
<h2 class="dummy2">
<a class="dum3" href="/model/login/">Emp</a>
</h2>
<p class="govuk-body">You are an employer</p>

【问题讨论】:

  • 欢迎来到 Stack Overflow。将来,您应该确保包括一次尝试(您尝试过什么)、描述发生了什么以及您希望发生什么。 (您收到的较早的反对票可能是由于您的第一篇文章中缺少此内容。)

标签: html xml xpath web-scraping


【解决方案1】:

这应该得到文本 - You are an employer

//a[contains(text(),'Emp')]/parent::*/following-sibling::p/text()

【讨论】:

  • 很高兴看到对我现有答案的改进,但这还不够接近:为什么要使用子字符串包含?它也可能最终匹配Employer,或Empathy,......为什么在元素名称上使用通配符?它可以轻松匹配 pdiv 或 ... 更不用说它会匹配文档中 any 元素的字符串值。为什么不必要地导航到父级只是为了使用following-sibling 轴而不是仅仅使用following 轴?
  • @kjhughes 你是对的,它可以匹配任何带有“Emp”的东西。我更新了答案以仅找到“a”元素。之所以使用兄弟是因为我不想使用索引 p[1]。我相信如果有多个 ps,使用 index 是不可靠的。在我们的例子中,我们关心的是找到直接的兄弟姐妹。
  • 不要在这里对p[1] 过于敏感;事实上,如果没有它,也可能会选择沿给定轴的多个p。 (您可能误用了this concern regarding first in document vs first child selection。)顺便说一句,使用p[1] 选择沿轴的第一个p;使用*[1][self::p] 获取必须是p 的直接元素。
【解决方案2】:

这个 XPath,

//a[.="Emp"]/following::p[1]/text()

将选择a之后的第一个p的文本,字符串值为"Emp"

【讨论】:

    【解决方案3】:

    我会像这样使用 XPATH 遍历树

    //a[text() = 'Emp']//..//../p

    //*[. = 'Emp']//..//../p

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-29
      • 2018-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多