1、lxml介绍
lxml是一个HTML/XML的解析器,主要的功能是如何解析和提取HTML/XML数据。
2、lxml解析HTML代码:
可以用来解析HTML代码,并且在解析HTML代码的时候,如果代码不规范,会自动进行补全。
#导入包
form 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-inactive"><a href="link3.html">third item</a></li>
<li class="item-1"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a> # 注意,此处缺少一个 </li> 闭合标签
</ul>
</div>
'''
#利用etree.HTML将字符串解析为HTML文档
html=etree.HTML(text)
result=etree.tostring(html)#将字符串序列化为HTML文档
3、html文件读取
#从文件中读取html代码:利用etree.parse()方法
from lxml import etree
html=etree.parse('xx.html')#读取外部文件xx.html
result=etree.tostring(html,pretty_print=True)
print(result)
4、在lxml中使用xpath语法:
4.1获取所有li标签
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-inactive"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
'''
html=etree.HTML(text)
lis=html.xpath("//li")
print(lis)
4.2获取所有li元素下的所有class属性的值
result=html.xpath("//li/@class")
4.3获取li标签下href为www.baidu.com的a标签:
result=html.xpath("//li/a[@href='www.baidu.com']")
4.4获取li标签下所有span标签:
result=html.xpath("//li/span")
4.5获取li标签下的a标签里的所有class:
result=html.xpath("//li/a//@class")
4.6获取最后一个li 的a的href属性对应的值:
result=html.xpath("//li[last()]/a/@href")
4.7获取倒数第二个li元素的内容
第一种方法:result=html.xpath("//li[last()-1]/a")
第二种方法:result=html.xpath("//li[last()-1]/a/text()")