
3.4.2 XPath介绍
XPath是一门在XML文档中查找信息的语言,XPath可用来在XML文档中对元素和属性进行导航遍历。XPath的选择功能十分强大,它不仅提供了非常简洁明了的路径选择表达式,还提供了超过100个内建函数用于字符串、数值、时间的匹配,以及节点、序列的处理等,几乎所有我们想要定位的节点都可以用XPath来选择。
XPath是W3C XSLT标准的主要元素,并且XQuery和XPointer都构建于XPath表达之上。因此,在爬取过程中XPath的应用是必不可少的。
1.节点
在XPath中,有7种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML文档是被作为节点树来对待的。XML文档树的根被称为文档节点或者根节点。
例如下面这个XML文档:
<?xml version="1.0" encoding="ISO-8859-1"?> <bookstore> <book> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> </bookstore>
上面的XML文档中的节点信息分解如下:
<bookstore> (文档节点) <author>J K. Rowling</author> (元素节点) lang="en" (属性节点)
2.基本值
基本值(或称原子值(atomic value))是无父或无子的节点。
3.项目
项目(item)是基本值或者节点。
4.节点关系
(1)父
每个元素以及属性都有一个父(parent)。在下面的例子中,book元素是title、author、year以及price元素的父:
<book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book>
(2)子
元素节点可有零个、一个或多个子(children)。在下面的例子中,title、author、year以及price元素都是book元素的子:
<book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book>
(3)同胞
同胞(sibling)即拥有相同的父的节点。在下面的例子中,title、author、year以及price元素都是同胞:
<book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book>
(4)先辈
先辈(ancestor)是某节点的父、父的父,等等。在下面的例子中,title元素的先辈是book元素和bookstore元素:
<bookstore> <book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> </bookstore>
(5)后代
后代(descendant)是某节点的子、子的子,等等。在下面的例子中,bookstore的后代是book、title、author、year以及price元素:
<bookstore> <book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> </bookstore>