xpath是一种xml路径语言,它提供了一种在xml文档中搜索信息的语法和方式,由于它也可以用来对HTML文档进行搜索,因此它在爬虫中用来作为信息抽取是一种不错的选择,而且它的速度还快。
在Python中,使用XPath可以先安装LXML库。可以使用 pip install lxml 快速安装,安装好就可以使用了。使用方法如下:
# 导入etree
from lxml import etree
# 将网页source code转换为被XPath识别和选择的对象
Selector = etree.HTML(source_code)
# 抽取需要的信息
Selector.xpath('')
首先我们需要了解XPath的节点是什么?有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。我们通过W3C中的例子来看看:
<?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>
对于上面的文档,有以下结论
<bookstore> (文档节点)
<author>J K. Rowling</author> (元素节点)
lang="en" (属性节点)
常用的路径表达式:
表达式 | 描述 | 例子 |
---|---|---|
nodename | 选取nodename节点的所有子节点 | xpath(‘//div’) |
/ | 从根节点选取 | xpath(‘/div’) |
// | 选取所有的当前节点,不考虑他们的位置 | xpath(‘//div’) |
. | 选取当前节点 | xpath(‘./div’) |
… | 选取当前节点的父节点 | xpath(‘…’) |
@ | 选取属性 | xpath(’//@calss’) |
| | 选取若干路径 | xpath(’//div/title | //div/book) |
谓语是用来查找某个特定的元素节点或者满足某种条件下的元素节点,谓语的语法被嵌在某个元素的方括号内,方括号中可以指定待选取的节点需要满足的条件。下面给出一些例子:
表达式 | 结果 |
---|---|
/bookstore/book[1] | 选取属于 bookstore 子元素的第一个 book 元素。 |
/bookstore/book[last()] | 选取属于 bookstore 子元素的最后一个 book 元素。 |
/bookstore/book[last()-1] | 选取属于 bookstore 子元素的倒数第二个 book 元素。 |
/bookstore/book[position() < 3] | 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。 |
//title[@lang] | 选取所有拥有名为 lang 的属性的 title 元素。 |
//title[@lang=‘eng’] | 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。 |
/bookstore/book[price>35.00] | 选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。 |
1、starts-with():获取以xxx开头的元素
例子:xpath(‘//div[start-with(@class,”test”)]’)
2、ends-with():获取以xxx结尾的元素
例子:xpath(‘//div[end-with(@class,”test”)]’)
3、contains:获取包含xxx的元素
例子:xpath(‘//div[contains(@id,”test”)]’)
4、text()
例子1:xpath(‘//div[contains(text(),”test”)]’)
例子2:xpath(‘//div[@id=”“test]/text()’)
5、last():返回当前节点集中索引为最后一个的节点
例子:/bookstore/book[last()]
6、position():定位当前节点集中的索引
例子:/bookstore/book[position() < 3]
1、“ | ” :计算两个节点集
2、and:与运算,计算同时满足两个条件
3、or :或运算,计算至少满足一个条件
4、=: 等于
5、!=:不等于
接下俩我们将对上面所讲述的一些只是点,在一个实际的例子中操作,并对它的结果进行演示,我们接下来给出一个xml文档
<!DOCTYPE html>
<html>
<head>
<title>xpath test</title>
</head>
<body>
<div price="99.8">
<div>
<ul>
<