lxml库
lxml是一个HTML/XML的解析器,主要的功能如何解析和提取HTML/XML数据。
lxml和正则一样,也是用C实现的,是一款高性能的Python HTML/XML解析器,我们可以利用之前学习的XPath语法,来快速定位特定元素以及节点信息。
读取与解析HTML
-
解析字符串
# -*- coding:utf-8 -*- from lxml import etree text = ''' <ul> <li>列表1</li> <li>列表2</li> <li>列表3</li> </ul> ''' # 使用HTML方法,解析,并生成一个Element对象,会自动进行规范化 html = etree.HTML(text) # 将Element对象转换为字符串,并指定编码与解码格式 print(etree.tostring(html, encoding='utf-8').decode('utf-8'))
-
读取文件并解析
from lxml import etree # 创建html解析器 parser = etree.HTMLParser() # 使用html解析器,去解析指定文件 html = etree.parse('中国.html', parser=parser) print(etree.tostring(html, encoding='utf-8').decode('utf-8'))
使用xpath解析
使用Element对象的xpath方法即可,其返回一个列表,例如:
# -*- coding:utf-8 -*-
from lxml import etree
text = '''
<ul>
<li class='active1'>列表1</li>
<li class='active2'>列表2</li>
<li class='active3'>列表3</li>
</ul>
'''
html = etree.HTML(text)
lis = html.xpath('//li') # 获取所有的li标签,返回一个列表
for li in lis:
print(etree.tostring(li, encoding='utf-8').decode('utf-8'), end='')
print(li.xpath('./@class')) # 获取当前li标签下的class属性
print(li.xpath('./text()')) # 获取当前li标签下的文本内容