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

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

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

div[@class="coordsAgence"]

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

【问题讨论】:

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

标签: html dom xpath html-parsing


【解决方案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()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-11
        • 2022-01-23
        • 2012-07-22
        • 1970-01-01
        • 2017-09-27
        • 2017-01-09
        • 1970-01-01
        相关资源
        最近更新 更多