XPath是一门在 XML 文档中查找信息的语言. XPath可用来在 XML 文档中对元素和属性进行遍历. 而我们熟知的HTML恰巧属于XML的一个子集. 所以完全可以用xpath去查找html中的内容.
首先, 先了解几个概念.
> <book>
> <id>1</id>
> <name>野花遍地香</name>
> <price>1.23</price>
> <author>
> <nick>周大强</nick>
> <nick>周芷若</nick>
> </author>
> </book>
在上述html中,
- book, id, name, price…都被称为节点.
- Id, name, price, author被称为book的子节点
- book被称为id, name, price, author的父节点
- id, name, price,author被称为同胞节点
OK~ 有了这些基础知识后, 我们就可以开始了解xpath的基本语法了
在python中想要使用xpath, 需要安装lxml模块.
pip install lxml
用法:
- 将要解析的html内容构造出etree对象.
- 使用etree对象的xpath()方法配合xpath表达式来完成对数据的提取
> from lxml import etree
>
> html = """
> book/*/nick
> <book>
> <id>1</id>
> <name>野花遍地香</name>
> <price>1.23</price>
> <nick>臭豆腐</nick>
> <author>
> <nick id="10086">周大强</nick>
> <nick id="10010">周芷若</nick>
> <nick class="joy">周杰伦</nick>
> <nick class="jolin">蔡依林</nick>
> <div>
> <nick>惹了</nick>
> </div>
> </author>
>
> <partner>
> <nick id="ppc">胖胖陈</nick>
> <nick id="ppbc">胖胖不陈</nick>
> </partner>
> </book>
> """
>
> et = etree.XML(html)
> 根据节点进行搜索
> result = et.xpath("/book")
> result = et.xpath("/book/id") # /在开头表示文档最开始, /在中间表示儿子
> result = et.xpath("/book//nick") # //表示后代
> result = et.xpath("/book/*/nick") # *表示通配符
>
> print(result)
xpath如何提取属性信息. 我们上一段真实的HTML来给各位讲解一下
准备HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Title</title>
</head>
<body>
<ul>
<li><a href="http://www.baidu.com">百度</a></li>
<li><a href="http://www.google.com">谷歌</a></li>
<li><a href="http://www.sogou.com">搜狗</a></li>
</ul>
<ol>
<li><a href="feiji">飞机</a></li>
<li><a href="dapao">大炮</a></li>
<li><a href="huoche">火车</a></li>
</ol>
<div class="job">李嘉诚</div>
<div class="common">胡辣汤</div>
</body>
</html>
xpath解析
from lxml import etree
f = open(“1.html”, mode=“r”, encoding=‘utf-8’)
tree = etree.HTML(f.read())
result = tree.xpath(“/html/body/ul/li/a/@href”)
print(result)result = tree.xpath(“/html/body/ul/li”)
for li in result:
print(li.xpath(“./a/@href”)) # 局部解析result = tree.xpath(“//div[@class=‘job’]/text()”) # [@class=‘xxx’]属性选取 text()获取文本
print(result)
XPath语法:
XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径表达式和我们
在常规的电脑文件系统中看到的表达式非常相似。
谓语:
谓语用来查找某个特定的节点或者包含某个指定的值的节点,被嵌在方括号中。
在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:
通配符:
*表示通配符
选取多个路径:
通过在路径表达式中使用“|”运算符,可以选取若干个路径。
示例如下:
//bookstore/book | //book/title
选取所有book元素以及book元素下所有的title元素