如何使用Xpath抓取指定h4后到下一个h4前的所有p标签内容
问题原因
你原有写法的逻辑漏洞是仅限制了p标签在目标h4的下一个h4之前,没有限制p必须在目标h4之后,因此会选中所有早于该后续h4的p标签,包含其他h4下的内容。
修正后的XPath写法(兼容XPath1.0,适配所有场景)
提取p标签节点
//h4[starts-with(., 'Accom')][1]/following-sibling::p[preceding-sibling::h4[1] = //h4[starts-with(., 'Accom')][1]]
直接提取p标签文本
//h4[starts-with(., 'Accom')][1]/following-sibling::p[preceding-sibling::h4[1] = //h4[starts-with(., 'Accom')][1]]/text()
逻辑说明
这个写法的核心是加了一层过滤:目标h4后续的同级p标签,最近的前一个h4必须是我们匹配到的目标h4,自然会在遇到下一个h4时停止抓取,不需要提前知道下一个h4的文本内容,也兼容p标签数量不固定、h4排列顺序可变的场景。
如果你的解析器支持XPath2.0,还可以用更简洁的区间写法:
//h4[starts-with(., 'Accom')][1]/(following-sibling::p until following-sibling::h4[1])/text()
内容的提问来源于stack exchange,提问作者Rich Stevens
相关产品推荐
相关产品推荐

