
本文介绍如何使用 XPath 的 following-sibling 轴定位目标元素的同级后续节点,解决“获取包含 'Monthly:' 的 div 后紧邻的 div 文本内容”这一常见网页数据提取需求。
本文介绍如何使用 xpath 的 `following-sibling` 轴定位目标元素的同级后续节点,解决“获取包含 'monthly:' 的 div 后紧邻的 div 文本内容”这一常见网页数据提取需求。
在 Web 自动化或爬虫开发中,常需基于可识别文本(如标签文字)动态定位其邻近的数据容器。例如,给定如下 HTML 片段:
<div class="my-3"> <div class="d-flex justify-content-between">Monthly:</div> <div>0 / 30,000</div> </div>
其中,“Monthly:” 是语义明确的标识性文本,而真正需要提取的是其后同一父级下的下一个 <div> ——即 0 / 30,000。此时,单纯依赖 //div[text()='Monthly:'] 无法直接获取目标,必须借助 XPath 的轴(axis)机制。
推荐使用的表达式为:
//*[normalize-space()='Monthly:']/following-sibling::div
✅ 解析说明:
- //*:匹配任意元素(不限定标签名,增强鲁棒性);
- [normalize-space()='Monthly:']:过滤出文本内容经空格标准化后等于 "Monthly:" 的元素(避免因换行、缩进导致匹配失败);
- /following-sibling::div:选取该元素所有位于其后的同级 <div> 元素(注意:是 所有 后续兄弟 div,不单指“下一个”)。
⚠️ 注意事项:
- 若父容器中存在多个后续 div,此表达式会返回全部匹配项。若严格限定为紧邻的下一个,可进一步加位置谓词:
//*[normalize-space()='Monthly:']/following-sibling::div[1]
- following-sibling 仅作用于同级元素(即共享同一父节点),不可跨层级使用;
- 避免使用 //div/following-sibling::div 等模糊路径,易受页面结构变化影响;优先基于语义文本定位,再通过轴关系导航,更稳定可靠。
? 延伸技巧:
若需同时提取文本并做清洗(如去除空格、逗号),可在代码层处理(以 Python + lxml 为例):
from lxml import html
tree = html.fromstring(html_content)
target_div = tree.xpath("//*[normalize-space()='Monthly:']/following-sibling::div[1]")
if target_div:
value = target_div[0].text_content().strip().replace(',', '')
print(value) # 输出:'0 / 30000'综上,following-sibling 是 XPath 中实现“基于标签找数据”的关键轴之一,配合 normalize-space() 可显著提升定位准确率与脚本健壮性。

















