You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用XPath提取div.entry内第一个hr标签之前的全部文本

错误原因

你之前的写法存在两个问题:

  1. ancestor::div[@class="entry"]/text()只会提取div节点的直接子文本节点,而你需要的文本都包裹在p等子节点内部,不会被匹配到
  2. 没有限定只取第一个hr之前的内容,会匹配整个div下的文本,不符合筛选要求

正确写法

场景1:XPath 1.0 环境(多数爬虫、旧解析器适用)

如果需要分别拿到每个文本节点,写法如下:

//div[@class="entry"]/hr[1]/preceding-sibling::*//text()

如果还要包含div下第一个hr之前的无标签直接文本,修改为:

//div[@class="entry"]/hr[1]/preceding-sibling::node()//text()

场景2:XPath 2.0 及以上环境

如果需要直接拼接所有符合条件的文本为一个字符串,写法如下:

string-join(//div[@class="entry"]/hr[1]/preceding-sibling::*//text(), ' ')

逻辑说明

上述写法的核心是使用preceding-sibling轴,先定位到class为entry的div下的第一个hr标签,再匹配该hr之前的所有同级节点,最后提取这些节点下全层级的文本内容,刚好匹配你给出的示例需求,可正确获取到some text、some text2、some text3、some text4四段内容。

内容的提问来源于stack exchange,提问作者rajsx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 03:24:08