安装
pip install lxml
Xpath 语法:
Xpath是一门在XML文档中查找信息的语言。XPath可用来在XML文档中对元素和属性遍历。XPath是W3C XSLT标准的主要元素,并且XQuery和XPointer都构建于Xpath表达之上。
具体语法知识参考 w3school
lmxl用法
利用它解析HTML代码:
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">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>
</ul>
</div>
'''
html = etree.Html(text)
result = etree.tostring(html)
print(result)
结果:
文件读取,可以从文件读取内容,我们创建一个hello.html:
<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>
利用parse方法来读取文件
from lxml import etree
html = etree.parse('hello.html')
result = etree.tostring(html,pretty_print = True)
print(result)
XPath 测试:
from lxml import etree
html = etree.parse('/home/wuhan/hello.html')
result = etree.tostring(html, pretty_print = True)
print(result.decode('utf-8'))
print(type(html))
#获取所有的 <li> 标签
result = html.xpath('//li')
print(result)
print(len(result))
print(type(result))
print(type(result[0]))
#获取 <li> 标签的所有 class
result = html.xpath('//li/@class')
print(result)
#获取 <li> 标签下 href 为 link1.html 的 <a> 标签
result = html.xpath("//li/a[@href='link1.html']")
print(result)
#获取 <li> 标签下的所有 <span> 标签
result = html.xpath('//li//span')
print(result)
#获取 <li> 标签下的所有 class,不包括 <li>
result = html.xpath('//li/a//@class')
print(result)
#获取最后一个 <li> 的 <a> 的 href
result = html.xpath('//li[last()]/a/@href')
print(result)
#获取倒数第二个元素的内容
result = html.xpath('//li[last()-1]/a')
print(result[0].text)
#获取 class 为 bold 的标签名
result = html.xpath('//*[@class="bold"]')
print(result[0].tag)
结果如下: