如何编写XPath精准抓取维基百科指定章节内容至下一个h2标签
原有XPath失效原因
- 你编写的表达式使用
following::轴匹配后续p元素时未设置终止边界,该轴的特性是匹配锚点位置之后整个文档流内的所有p节点,自然会一路抓取到页面最末尾 - 现有写法既没有将抓取范围卡在「Demographics」对应的h2标签位置上,也没有排除章节内嵌套的表格内容,不符合提取要求
适配需求的XPath实现
核心范围判断逻辑:
- 仅匹配位置在「Geography and climate」章节起始锚点之后的p元素
- 仅匹配位置在「Demographics」章节起始锚点之前的p元素
- 直接过滤被
<table>标签嵌套的p元素,自动跳过表格内的所有内容
可直接运行的XPath表达式:
//span[@id='Geography_and_climate']/ancestor::h2/following::p[ not(ancestor::table) and count(. | //span[@id='Demographics']/ancestor::h2/preceding::p) = count(//span[@id='Demographics']/ancestor::h2/preceding::p) ]/text()
匹配效果
- 抓取范围严格卡在两个h2标题的边界之间,不会抓取「Demographics」章节开始之后的任何段落
- 所有表格内的p节点都会被自动过滤,不会将表格内容混入提取结果
- 最终返回的都是两个章节范围内的纯文本内容,没有多余的标签结构
内容的提问来源于stack exchange,提问作者Haseeb
相关产品推荐
相关产品推荐

