lxml是一个Python库,使用它可以轻松处理XML和HTML文件,还可以用于web爬取。市面上有很多现成的XML解析器,但是为了获得更好的结果,开发人员有时更愿意编写自己的XML和HTML解析器。这时lxml库就派上用场了。这个库的主要优点是易于使用,在解析大型文档时速度非常快,归档的也非常好,并且提供了简单的转换方法来将数据转换为Python数据类型,从而使文件操作更容易。
pip install lxml
test、test.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Study</title>
</head>
<body>
<h1>java</h1>
<p href="https://blog.csdn.net/qq_41220451" class="p1">python</p>
<p href="https://blog.csdn.net/qq_41220451">c</p>
<a>c++</a>
<a>html</a>
<a>html</a>
<a>css</a>
</body>
</html>
from lxml import etree
html = etree.HTML(test) #获取内容
html = etree.HTML(test.html) #获取文件
语法
//p #获取html下所有的p标签
/html/body/p #顺着节点找到p标签
/descendant::p #当前节点后代里面找 a 标签
实例
from lxml import etree
html = etree.HTML(test)
p = html.xpath('//p')
print(p)
结果:[<Element p at 0x17f0f0aad48>, <Element p at 0x17f0f0aad88>]
from lxml import etree
html = etree.HTML(test)
p = html.xpath('/html/body/p')
print(p)
结果:[<Element p at 0x1b491bead88>, <Element p at 0x1b491beadc8>]
from lxml import etree
html = etree.HTML(test)
p = html.xpath('/descendant::p')
print(p)
结果:[<Element p at 0x1b62cd5ad88>, <Element p at 0x1b62cd5adc8>]
获取p标签中的href属性值
from lxml import etree
html = etree.HTML(test)
p = html.xpath('/html/body/p/@href')
print(p)
结果:['https://blog.csdn.net/qq_41220451', 'https://blog.csdn.net/qq_41220451']
获取所有a标签的文本内容
from lxml import etree
html = etree.HTML(test)
a = html.xpath('/html/body/a/text()')
print(a)
结果:['c++', 'html', 'css']
获取p标签中class属性为p1的标签的文本内容
from lxml import etree
html = etree.HTML(test)
p = html.xpath('/html/body/p[@class="p1"]/text()')
print(p)
结果:['python']
从p标签获取内容为python的
html.xpath('/html/body/p[text()="python"]')
关键语句
#查看标签属性
html.xpath('/html/body/p/@href')
#查看标签文本
html.xpath('/html/body/a/text()')
#属性筛选
html.xpath('/html/body/p[@class="p1"]/text()')
#文本筛选
html.xpath('/html/body/p[text()="python"]')
#位置筛选
html.xpath('/html/body/a[2]')