介绍
XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上,我们也经常使用它来提取网页中的数据。
1、安装XPath谷歌插件
为了方便调试,我们通常会先安装XPath谷歌插件, 下载地址(提取码:0lk9),如果安装时提升“程序包无效”,点这里解决,安装完毕后重启浏览器,点击右上角的小图标,如下表示安装成功
2、xpath使用
比如我们要提取某个小说站点的书名和作者,通过xpath插件可以直接调试匹配,左边框为匹配规则
,右边框为匹配结果
,然后可以将得到的匹配规则放到代码运行。//div[@class="bookname"]/a/text()
规则含义为在当前class为bookname的div中,获取其下的a标签,然后再从a标签中提取文本信息
from fake_useragent import UserAgent
import requests
from lxml import etree
# 访问小说站点
url = 'http://www.zongheng.com/category/1.html'
header = {'User-Agent': UserAgent().random}
resp = requests.get(url, headers=header)
e = etree.HTML(resp.text)
# 提取书名
bookNames = e.xpath('//div[@class="bookname"]/a/text()')
# 提取作者
authors = e.xpath('//div[@class="author"]/a/text()')
# 输出书名和作者
for bookName, author in zip(bookNames, authors):
print(bookName, ":", author)
执行结果
傲世邪神 : 我爱小豆
天道重启 : 三青色
七世神盘 : 莫白1
云雁关山度 : 轻浮你一笑
我在玄界修仙法 : 雨暮浮屠
狂刀镇世 : 剑痴酒徒
冥龙仙尊 : 地狱吃炒面
....
3、常用表达式
表达式 | 说明 |
---|---|
/ | 从根节点选取 |
// | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置 |
. | 选取当前节点 |
… | 选取当前节点的父节点 |
@ | 选取属性 |
* | 匹配任何元素节点 |
@* | 匹配任何属性节点 |
node() | 匹配任何类型的节点 |
/body/div[1] | 选取body下的第一个div节点 |
/body/div[last()] | 选取body下最后一个div节点 |
/body/div[last()-1] | 选取body下倒数第二个节点 |
/body/div[positon()< 3] | 选取body下前丙个div节点 |
/body/div[@class] | 选取body下带有class属性的div节点 |
/body/div[@class=“main”] | 选取body下class属性为main的div节点 |
/body/div[price>35.00] | 选取body下price元素大于35的div节点 |