《Python入门核心技术》专栏总目录・点这里
文章目录
- 1. XPath简介
- 2. XPath语法
- 2.1 选择节点
- 2.2 路径分隔符
- 2.3 谓语
- 2.4 节点关系
- 2.5 运算符
- 3. 节点
- 3.1 元素节点(Element Node)
- 3.2 属性节点(Attribute Node)
- 3.3 文本节点(Text Node)
- 3.4 注释节点(Comment Node)
- 3.5 父节点(Parent Node)
- 3.6 子节点(Child Node)
- 3.7 后一个兄弟节点(Following-sibling Node)
- 3.8 前一个兄弟节点(Preceding-sibling Node)
- 4. 轴
- 4.1 子节点轴(child::)
- 4.2 父节点轴(parent::)
- 4.3 后一个兄弟节点轴(following-sibling::)
- 4.4 前一个兄弟节点轴(preceding-sibling::)
- 4.5 后代节点轴(descendant::)
- 4.6 祖先节点轴(ancestor::)
- 4.7 属性轴(attribute::)
- 4.8 自身节点轴(self::)
- 5. 运算符
- 5.1 位置运算符:
- 5.2 关系运算符:
- 5.3 逻辑运算符:
- 5.4 字符串运算符:
- 6. 实例
- 示例1:选择所有链接
- 示例2:选择特定属性值的元素
- 示例3:选择文本内容
- 7. 总结
大家好,我是水滴~~
在进行网络爬虫开发之前,了解XPath是非常重要的。XPath是一种用于在XML和HTML文档中定位和选择节点的语言。本文将详细介绍XPath的基本概念、节点选择、语法规则、轴、运算符,并提供大量的代码示例帮助读者更好地理解和应用XPath。
1. XPath简介
XPath(XML Path Language)是一种用于在XML和HTML文档中导航和定位节点的语言。它是W3C的标准,广泛应用于数据提取、文档解析和网页爬虫等领域。
2. XPath语法
XPath语法用于构建XPath表达式,以选择和定位XML或HTML文档中的节点。以下是XPath语法的基本要点:
2.1 选择节点
- 使用节点名称选择节点:
//elementName
- 使用通配符选择所有节点:
//*
- 使用谓语过滤节点:
//elementName[predicate]
2.2 路径分隔符
- 使用斜杠(/)表示层级关系:
/parent/child
- 使用双斜杠(//)表示跨层级选择:
//ancestor/descendant
2.3 谓语
- 使用方括号([])来进一步过滤节点:
//elementName[predicate]
- 使用属性和值进行谓语过滤:
//elementName[@attributeName='value']
2.4 节点关系
- 使用轴(axis)描述节点之间的关系:
axis::node
-
常用的轴包括:
-
子节点轴(child::):选择指定元素的所有直接子节点。
-
父节点轴(parent::):选择指定元素的父节点。
-
兄弟节点轴(following-sibling::、preceding-sibling::):选择指定元素的后一个或前一个兄弟节点。
-
属性轴(attribute::):选择指定元素的所有属性节点。
2.5 运算符
- 位置运算符([n]):选择指定位置的节点。
//elementName[position()]
- 逻辑运算符(and、or、not):组合表达式或进行条件判断。
//elementName[@attribute1='value1' and @attribute2='value2']
- 文本运算符:用于匹配文本内容。
//elementName[contains(text(), 'keyword')]
这是XPath语法的基本要点。您可以根据具体需求结合这些规则来构建自己的XPath表达式,以选择和定位所需的节点。
3. 节点
节点是XPath中的基本概念,用于定位和选择XML或HTML文档中的特定部分。以下是XPath中常见的节点类型和相应的示例:
3.1 元素节点(Element Node)
- 示例:选择所有元素节点
//*
- 示例:选择特定元素节点
//book
3.2 属性节点(Attribute Node)
- 示例:选择具有特定属性值的元素节点
//book[@category='fiction']
3.3 文本节点(Text Node)
- 示例:选择元素节点下的文本内容
//book/title/text()
3.4 注释节点(Comment Node)
- 示例:选择注释节点
//comment()
3.5 父节点(Parent Node)
- 示例:选择指定元素节点的父节点
//book/..
3.6 子节点(Child Node)
- 示例:选择指定元素节点的所有直接子节点
//book/*
3.7 后一个兄弟节点(Following-sibling Node)
- 示例:选择指定元素节点的后一个兄弟节点
//book/following-sibling::book[1]
3.8 前一个兄弟节点(Preceding-sibling Node)
- 示例:选择指定元素节点的前一个兄弟节点
//book/preceding-sibling::book[1]
以上示例展示了XPath中不同类型节点的选择方法。您可以根据实际需求和文档结构,使用适当的XPath表达式来选择和定位所需的节点。
4. 轴
XPath轴(Axis)用于描述节点之间的关系,它可以扩展XPath的选择能力。以下是XPath中常用的轴及其示例:
4.1 子节点轴(child::)
- 示例:选择book元素的所有直接子节点
//book/child::*
4.2 父节点轴(parent::)
- 示例:选择title元素的父节点(即book元素)
//title/parent::*
4.3 后一个兄弟节点轴(following-sibling::)
- 示例:选择title元素的后一个兄弟节点(即author元素)
//title/following-sibling::*
4.4 前一个兄弟节点轴(preceding-sibling::)
- 示例:选择title元素的前一个兄弟节点(如果存在)
//title/preceding-sibling::*
4.5 后代节点轴(descendant::)
- 示例:选择book元素的所有后代元素节点
//book/descendant::*
4.6 祖先节点轴(ancestor::)
- 示例:选择title元素的所有祖先元素节点
//title/ancestor::*
4.7 属性轴(attribute::)
- 示例:选择book元素的所有属性节点
//book/attribute::*
4.8 自身节点轴(self::)
- 示例:选择当前节点(例如,选择当前元素节点)
//self::node()
这些轴可以与其他XPath语法结合使用,以更精确地选择和定位所需的节点。根据文档结构和需要,选择适当的轴来构建XPath表达式。
5. 运算符
XPath运算符用于在XPath表达式中执行比较、逻辑和算术操作。以下是XPath中常用的运算符:
5.1 位置运算符:
[n]
:选择节点集中的第n个节点。
//book[2] //选择第二个book节点
5.2 关系运算符:
=
:检查两个值是否相等。
//title[text() = 'Harry Potter'] //选择文本内容为"Harry Potter"的title节点
!=
:检查两个值是否不相等。
//book[author != 'John Doe'] //选择author不是"John Doe"的book节点
<
、>
、<=
、>=
:执行数值或字符串的比较。
//price > 20 //选择价格大于20的节点
5.3 逻辑运算符:
and
:逻辑与运算符,两个条件都满足时返回true。
//book[price > 20 and category = 'fiction'] //选择价格大于20且类别为"fiction"的book节点
or
:逻辑或运算符,两个条件满足其一时返回true。
//book[price > 20 or category = 'fiction'] //选择价格大于20或类别为"fiction"的book节点
not
:逻辑非运算符,取反操作。
//book[not(price > 20)] //选择价格不大于20的book节点
5.4 字符串运算符:
concat()
:将多个字符串连接起来。
concat('Hello', 'World') //返回"HelloWorld"
contains()
:检查一个字符串是否包含另一个字符串。
contains(title, 'Potter') //选择title中包含"Potter"的节点
starts-with()
:检查一个字符串是否以指定的前缀开始。
starts-with(title, 'Harry') //选择title以"Harry"开头的节点
ends-with()
:检查一个字符串是否以指定的后缀结束。
ends-with(title, 'Potter') //选择title以"Potter"结尾的节点
这些运算符可以在XPath表达式中使用,以执行比较、逻辑和算术操作,从而选择和定位所需的节点。根据具体的需求,选择适当的运算符来构建XPath表达式。
6. 实例
为了更好地理解XPath的应用,以下是一些具体的实例:
示例1:选择所有链接
假设我们有一个HTML文档,其中包含多个链接。我们可以使用XPath选择所有的链接元素。
<!DOCTYPE html>
<html>
<body>
<div>
<a href="https://www.example.com">Link 1</a>
<a href="https://www.example.com">Link 2</a>
<a href="https://www.example.com">Link 3</a>
</div>
</body>
</html>
XPath表达式示例:
//a //选择所有<a>元素节点
示例2:选择特定属性值的元素
假设我们有一个XML文档,其中包含多个元素,每个元素都有一个category属性。我们可以使用XPath选择具有特定属性值的元素。
<library>
<book category="fiction">Book 1</book>
<book category="non-fiction">Book 2</book>
<book category="fiction">Book 3</book>
</library>
XPath表达式示例:
//book[@category='fiction'] //选择category属性值为"fiction"的所有<book>元素节点
示例3:选择文本内容
假设我们有一个XML文档,其中包含多个元素,每个元素都有一个
<library>
<book>
<title>Book 1</title>
</book>
<book>
<title>Book 2</title>
</book>
</library>
XPath表达式示例:
//book/title/text() //选择所有<book>元素下的<title>文本内容
7. 总结
本文简要介绍了XPath的基本概念、节点选择、语法规则、轴和运算符。XPath是爬虫开发中非常重要的一部分,可以帮助我们准确定位和提取所需的数据。通过学习XPath的基本知识和实际应用,您将能够更加灵活和高效地开发网络爬虫。希望本文对您的学习和实践有所帮助!如有任何问题,请随时向我提问。