Python网络爬虫技术与实战
上QQ阅读APP看书,第一时间看更新

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>