如何使用XPath选取页面第二组<ol>有序列表以抓取健身动作提示内容
问题原因分析
- 你之前使用的
//ol[2]不生效是因为XPath的默认匹配逻辑是逐个父节点匹配子节点的索引,也就是它会找所有父元素下的第二个<ol>标签,而非全局范围内的第二个有序列表,所以大概率匹配不到目标内容。 - 基于标题文本匹配的写法受页面文本翻译、特殊字符、标题标签类型变化的影响很大,很容易失效。
- 写死层级的绝对路径写法容错性极低,页面结构只要有微小调整就会返回空结果。
正确XPath写法
(//div[contains(@class, "field-name-body")]//ol)[2]
写法说明
- 先用
contains(@class, "field-name-body")匹配页面正文的根容器,避免多类名顺序变化导致的匹配失败问题。 - 用
//ol选中该正文容器下所有的有序列表节点,外层加括号将所有匹配结果转为一个独立的节点集合。 - 最后用
[2]取节点集合里的第二个元素,完全匹配你提到的「第一个有序列表为动作说明,第二个为动作提示」的页面共性,适配不同结构的目标页面。
内容的提问来源于stack exchange,提问作者Bruce Mathers
相关产品推荐
相关产品推荐

