网站爬取:获取13位EAN码的XPath方案咨询
提取HTML中EAN码的两种XPath实现方法
方法一:定位“EAN:”对应的标签后的 内容
这种方法完全可行,核心逻辑是先匹配文本为EAN: 的
基础XPath表达式
//dt[text()='EAN: ']/following-sibling::dd[1]/text()
//dt[text()='EAN: ']:全局查找文本完全匹配EAN:(注意末尾空格)的- 标签
/following-sibling::dd[1]:选取该- 的第一个
- 兄弟节点
/text():提取- 节点的文本内容,最终得到目标EAN码
8720153872126- 节点的文本内容,最终得到目标EAN码
鲁棒性优化版本
如果
normalize-space()处理空白字符,避免匹配失败://dt[normalize-space(text())='EAN:']/following-sibling::dd[1]/text()
normalize-space()会去除文本前后空白,并将中间连续空白替换为单个空格,适配格式不规范的场景。
方法二:匹配所有13位数字字符串
这种方法同样可行,适合页面中13位数字即为EAN码的场景,通过正则匹配提取符合格式的内容。
基础XPath表达式
//text()[matches(., '^\d{13}$')]
//text():全局查找所有文本节点matches(., '^\d{13}$'):用正则匹配恰好13位纯数字的文本(^和$限定首尾,\d{13}表示13个数字)- 在你的示例中,该表达式会直接返回目标EAN码
8720153872126
范围限定优化
若页面存在其他无关的13位数字,可限定搜索范围在
- 标签内,避免误匹配:
- 方法一精准度更高,直接关联“EAN:”标签,不受其他13位数字干扰
- 方法二更灵活,适合无法通过标签文本定位的场景,但需确保无无关的13位数字存在
//dl//text()[matches(., '^\d{13}$')]
总结
两种方法均可行,适用场景不同:
内容的提问来源于stack exchange,提问作者Jarik Witteveen
相关产品推荐
相关产品推荐

