全称XMl Path Language,是一种在XML中寻找信息的语言,同样适用于HTML文档搜索。XPath功能十分强大,提供了非常简洁明了的路径选择表达式。拥有超过100个内建函数,用于字符串,数字,时间以及节点的匹配,序列的处理等。几乎所有想要定位的节点都可以用XPath来选择。
1.常用规则
nodename :选取此节点的所有子节点
/ :从当前节点选取直接子节点
// :从当前节点选取子孙节点
. :选取当前节点
.. :选取当前节点的父节点
@ :选取属性
示例://title[@lang=‘eng‘],代表锁选择的名称为title,同时属性;lang的值为eng的节点。
2,安装lxml
windows:pip3 install lxml
3,使用示例
from lxml import etree text = """ <div> <ul> <li class="item-0"><a href="link1.html">first item</a></li> <li class="item-1"><a href="link2.html">second item</a></li> <li class="item-active"><a href="link3.html">third item</a></li> <li class="item-4"><a href="link4.html">fourth item</a></li> <li class="item-5"><a href="link5.html">fifth item</a> </ul> </div> """ html = etree.HTML(text) res = etree.tostring(html) print(res.decode(‘utf-8‘))
首先到如etree模块,声明一段HTML文本,调用HTML类进行初始化,这样就成功构造了一个Xpath解析对象,text中最后一个li节点时没有闭合的,但是etree可以自动修正HTML文本。调用tostring输出修正后的文本,在decode转成str。
<html><body><div> <ul> <li class="item-0"><a href="link1.html">first item</a></li> <li class="item-1"><a href="link2.html">second item</a></li> <li class="item-active"><a href="link3.html">third item</a></li> <li class="item-4"><a href="link4.html">fourth item</a></li> <li class="item-5"><a href="link5.html">fifth item</a> </li></ul> </div> </body></html>
经过处理,li节点被不全,并自动添加了,body,html节点。另外,可以直接读取文本文件进行解析:
html = etree.parse(‘./text.html‘, etree.HTMLParser()) print(etree.tostring(html).decode(‘utf-8‘))
原文:https://www.cnblogs.com/zivli/p/10887268.html