🎯 一款可定制、具备反检测功能的云浏览器,由自主研发的 Chromium驱动,专为网页爬虫AI 代理设计。👉立即试用
什么是XPath?路径语法、轴和提取示例

什么是XPath?

无抓取的抓取浏览器提供了可用XPath表达式导航的公开页面DOM内容。

简而言之

  • XPath是一种用于选择树状数据中的值和节点的表达语言。 其路径语法可以导航子节点、后代、父节点、祖先、兄弟节点和属性。
  • XPath从上下文节点开始工作。 绝对路径从文档根开始;相对路径从当前上下文开始。
  • 谓词过滤候选节点。 属性值、位置、文本测试和函数可以缩小路径。
  • 当选择依赖于关系时,XPath很有用。 父级或祖先遍历以及依赖文本的条件是选择它的常见原因。

XPath,XML路径语言的缩写,是一种用于寻址树中节点和值的表达语言。尽管其名称来自XML,但浏览器和自动化API也可以对HTML文档评估XPath。

W3C XPath 3.1推荐 将XPath定义为一种表达语言,其路径表达式为数据模型提供分层寻址。

XPath是如何工作的?

XPath对上下文评估表达式并返回匹配的节点或计算的值。

路径由步骤组成。每个步骤选择一个轴,应用节点测试,并可以添加谓词。该表达式 //article[@data-id] 选择具有data-id属性的文章后代。该表达式 .//h2 搜索当前上下文节点的H2后代。

XPath表达式的主要部分是什么?

XPath结合位置步骤、轴、节点测试、谓词和函数。

语法目的示例
/开始一个绝对路径或分隔子步骤/html/body
//从当前点选择后代//main//a
.引用当前上下文.//span
..移动到父节点//span/..
@选择或测试一个属性//a/@href
[ ]过滤候选节点//li[@data-id]

XPath轴是什么?

XPath轴描述上下文节点与候选节点之间的关系。

  • 子节点和后代。 向下移动一级或搜索更深的后代。
  • 父节点和祖先。 从已知节点向上移动到包含元素。
  • 后续兄弟和前驱兄弟。 选择上下文节点旁边的节点。
  • 属性。 选择属性而不是元素节点。
  • 自身。 测试或保留当前上下文节点。

XPath在网页抓取中如何使用?

网页抓取者使用XPath根据文档结构和关系定位元素、属性和文本。

依赖文本的选择

通过文本找到标签或标题,然后选择附近的值。

祖先遍历

从一个稳定的子节点开始,移动到拥有它的记录容器。

兄弟关系

在页面缺乏有用属性时,选择一个跟随已知标签的值。

XML源

导航带有命名空间和文档特定结构的馈送或其他XML文档。

浏览器 Document.evaluate() 方法在上下文节点上评估XPath表达式,并返回XPathResult。

MDN XPath和CSS比较 显示坐标对应于CSS组合器或较新的伪类,以及XPath保留的独特功能。

您如何编写可维护的XPath?

可维护的XPath使用稳定的属性和本地关系,而不是从文档根目录复制绝对路径。

  1. 选择一个稳定的上下文节点,如记录容器。
  2. 使用表达意义的特定属性或标签。
  3. 当可用较小的上下文时,限制广泛的后裔搜索。
  4. 避免与当前布局相关的长位置路径。
  5. 在几个页面变体上测试表达式并验证结果计数。

XPath表达式如何被评估?

XPath在上下文节点上评估表达式。位置步骤沿着轴选择节点,应用节点测试,然后使用谓词过滤结果序列。上下文很重要:以 // 开头的表达式从更广泛的根中搜索后裔,而以 . 开头的相对表达式则保持固定于当前记录容器。

这种评估模型解释了为什么相同的表达式在浏览器控制台和解析器循环中可能返回不同的结果。如果循环已经持有一个产品卡,则相对路径应从该卡开始。一个无范围的后裔搜索可能逃脱预期的记录,并反复返回页面上的第一个匹配值。

节点顺序和结果类型也很重要。根据引擎和调用API,表达式可以生成节点序列、字符串、数字或布尔值。阅读库合同,以便提取代码不会意外地将错误节点转换为字符串或忽略多个结果。

哪些XPath轴对于网络提取来说重要?

子轴和后裔轴覆盖大多数向下导航。属性选择附加到元素的值。当字段必须与标记部分或封闭记录相关时,父级和祖先向上移动。紧随其后的兄弟和前面的兄弟连接共享父级的邻近元素。

轴是有用的,因为它们描述关系而不是绝对位置。即使无关卡片使用相似的类,价格也可以从同一卡片中选取产品标题。当没有专用列类存在时,表值可以与标题单元格关联。

广泛的轴也可以创造隐含匹配。一个过于深入的祖先搜索可能到达页面主体,而跟随搜索可以越过另一个记录。通过特定的节点测试和谓词限制轴,然后检查它在每个代表模板上返回多少节点。

XPath谓词如何工作?

谓词过滤步骤选择的节点。它们可以测试属性、子元素、标准化文本、位置或条件组合。因为谓词在上下文中运行,位置是相对于当前节点序列,而不是在原始标记中的通用索引。

当页面暴露有意义的标识符时,属性相等通常比位置更清晰。当标签定义关系时,文本条件是有用的,但可见语言在不同地区或编辑修订中可能会变化。在适当时标准化空白,并避免可能接受多个无关标签的部分文本匹配。

保持谓词足够小以进行解释。如果表达式组合了许多替代标签、深层祖先和数字位置,则将页面分类与字段选择分开。每个已知模板的短XPath通常比一个旨在在所有可能页面上生存的表达式更容易测试。

XPath中的命名空间是什么?

命名空间区分共享本地名称但属于不同词汇的元素。它们对于XML、SVG和混合文档尤其相关。在XPath表达式中,命名空间前缀必须通过浏览器或解析器使用的API与正确的命名空间URI相关联。

作为HTML解析的HTML文档通常与XHTML或XML文档的命名空间行为不同。在HTML DOM上有效的表达式在通过XML解析器处理时可能会失败。确认响应内容类型和解析模式,然后再调整路径。

如果嵌入的SVG或其他命名空间是目标的一部分,请直接在所选择的引擎中测试它。一些便利API提供命名空间解析助手,而另一些则需要显式映射。不要仅仅为了使表达式匹配而移除命名空间检查;这可能会选择一个具有相同本地名称的意外元素。

您如何调试和维护XPath?

一步一步调试。从一个稳定的容器开始,检查返回的节点,并仅在当前结果正确后添加下一个轴或谓词。从生成代码将使用的同一上下文节点测试相对路径。

为列表页面、详细信息、空状态、本地化变体和可选模块存储代表性文档。断言应覆盖值、节点计数和记录边界。如果一个仍返回一个字符串的路径现在指向一个面包屑或隐藏重复,可能是错误的。

使用提取方案和页面分类器版本表达式。当源引入新模板时,明确识别并测量其存在。这使得XPath维护可追踪,避免在其行为已经难以推理的表达式中默默添加另一个分支。

结论

XPath是一种具有强大导航、过滤和计算值支持的树查询语言。它适用于提取任务,其中有用的锚点和所需节点通过父节点、祖先、兄弟、属性或文本条件相关联。

准备好构建您的网络数据工作流程了吗?

使用Scrapeless检索公共网络内容,然后应用适合您数据集的发现和提取模式。

免费开始 →

常见问题

XPath可以与HTML一起使用吗?

是的。浏览器和自动化API可以根据它们实现的XPath版本和特性对解析后的HTML文档评估XPath。

XPath中的/和//有什么区别?

单个斜杠将直接子步骤分开,而双斜杠从当前点搜索后代。

XPath可以选择属性吗?

可以。属性轴使用@前缀,例如//a/@href用于链接元素的href属性。

为什么应限制广泛的//搜索?

较小的上下文减少了不必要的遍历,使表达式的预期记录边界更加清晰。

参考文献