如何编写XPATH提取Summer标题对应价格并在指定span节点前停止提取
问题原因
你原本的XPath选中的是完整的<p class="price">元素,提取元素文本时会自动拼接其所有后代节点的文本内容,所以会带出后面span标签里的多余内容。你要提取的€180,000是该p标签下的第一个直接文本节点,单独定位这个节点即可。
正确XPath语句
推荐使用属性定位的稳定版本:
//p[contains(@class,'heading') and normalize-space(.)='Summer']/following-sibling::p[@class='price']/text()[1]
如果一定要按同级节点顺序定位,也可以用:
//p[contains(.,'Summer')]/following-sibling::p[2]/text()[1]
逻辑说明
- 路径末尾加
/text()[1]表示取当前节点下的第一个直接文本节点,正好对应你要的€180,000,不会包含子span内的文本 - 推荐优先用
@class属性定位节点,不要依赖同级节点的顺序索引,避免页面结构微调后XPath失效 - 你之前写的变体逻辑错误:
preceding-sibling是匹配同级的前置节点,而你要排除的span是p标签的子节点,不属于同级节点,所以过滤条件不会生效。
内容的提问来源于stack exchange,提问作者Rich Stevens
相关产品推荐
相关产品推荐

