python怎么解析xml
这篇文章主要介绍了python怎么解析xml的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python怎么解析xml文章都会有所收获,下面我们一起来看看吧。
介绍lxml库是一个python的xml解析库,它支持HTML和xml的解析,并且支持Xpath解析方式。相比于原生的xml解析而言,lxml的接下效率相当高。
Xpath是一门在xml文档中查找信息的语言,虽然它最早是用来搜寻XML文档的,但它也可以用于查找html语言。它的选择功能十分强大,提供了非常简单明了的路径选择表达式,另外他还提供了超过100个内建函数用于数据处理。
安装使用pip进行安装即可,对应的pip命令如下:
pip install lxml
一、读取文本解析节点
fromlxmlimportetreetext='''<div><ul><liclass="item-0"><ahref="link1.html">第一个</a></li><liclass="item-1"><ahref="link2.html">seconditem</a></li><liclass="item-0"><ahref="link5.html">a属性</a></ul></div>'''html=etree.HTML(text)#初始化生成一个XPath解析对象result=etree.tostring(html,encoding='utf-8')#解析对象输出代码print(type(html))print(type(result))print(result.decode('utf-8'))
etree会修复缺少的HTML文本节点,所以打印结果是有补全html标签的。
二、读取HTML文件进行解析
fromlxmlimportetreehtml=etree.parse('test.html',etree.HTMLParser())#指定解析器HTMLParser会根据文件修复HTML文件中缺失的如声明信息result=etree.tostring(html)#解析成字节#result=etree.tostringlist(html)#解析成列表print(type(html))print(type(result))print(result)
三、获取所有节点
fromlxmlimportetreehtml=etree.parse('test',etree.HTMLParser())result=html.xpath('//*')#//代表获取子孙节点,*代表获取所有print(type(html))print(type(result))print(result)
返回一个列表,每个元素都是Element类型,所有的节点都包含在其中。
如需获取li节点,可以在//后面加上节点名称,然后调用Xpath方法。
四、文本获取
fromlxmlimportetreetext='''<div><ul><liclass="item-0"><ahref="link1.html">第一个</a></li><liclass="item-1"><ahref="link2.html">seconditem</a></li></ul></div>'''html=etree.HTML(text,etree.HTMLParser())result=html.xpath('//li[@class="item-1"]/a/text()')#获取a节点下的内容result1=html.xpath('//li[@class="item-1"]//text()')#获取li下所有子孙节点的内容print(result)print(result1)
通过Xpath的text()方法,我们可以获取节点中的文本。
五、属性获取
通过@符号即可获取节点的属性,比如下面代码的获取a标签的href属性:
result=html.xpath('//li/a/@href')#获取a的href属性result=html.xpath('//li//@href')#获取所有li子孙节点的href属性
六、按序选择
我们进行选择的时候有时候会匹配多个节点,但我们只需要其中的一个,这时候我们就可以通过引入索引的方法(中括号内加索引值)获取特定次序的节点:
fromlxmlimportetreetext1='''<div><ul><liclass="aaa"name="item"><ahref="link1.html">第一个</a></li><liclass="aaa"name="item"><ahref="link1.html">第二个</a></li><liclass="aaa"name="item"><ahref="link1.html">第三个</a></li><liclass="aaa"name="item"><ahref="link1.html">第四个</a></li></ul></div>'''html=etree.HTML(text1,etree.HTMLParser())result=html.xpath('//li[contains(@class,"aaa")]/a/text()')#获取所有li节点下a节点的内容result1=html.xpath('//li[1][contains(@class,"aaa")]/a/text()')#获取第一个result2=html.xpath('//li[last()][contains(@class,"aaa")]/a/text()')#获取最后一个result3=html.xpath('//li[position()>2andposition()<4][contains(@class,"aaa")]/a/text()')#获取定位值大于3且小于4的节点(也就是获取第三个)result4=html.xpath('//li[last()-2][contains(@class,"aaa")]/a/text()')#获取倒数第三个print(result)print(result1)print(result2)print(result3)print(result4)
关于“python怎么解析xml”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“python怎么解析xml”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。