Python 文档解析lxml库的使用详解
作者:小嗷犬 时间:2022-01-24 10:42:38
1.lxml库简介
lxml 是 Python 常用的文档解析库,能够高效地解析 HTML/XML 文档,常用于 Python 爬虫。
lxml 为第三方库,需要我们通过pip命令安装:
pip install lxml
2.lxml库方法介绍
lxml 库提供了一个
etree
模块,该模块专门用来解析 HTML/XML 文档,让我们先导入模块:
from lxml import etree
使用
etree
模块的HTML()
方法可以创建 HTML 解析对象:
from lxml import etree
parse_html = etree.HTML(html)
HTML()
方法能够将 HTML 标签字符串解析为 HTML 文件,并且可以自动修正 HTML 文本:
from lxml import etree
html_str = '''
<div>
<ul>
<li><a href="www.python.org">Python</a></li>
<li><a href="www.java.com">Java</a>
<li><a href="www.csdn.net">CSDN</a></li>
</ul>
</div>
'''
html = etree.HTML(html_str)
# tostring()将标签元素转换为字符串输出,注意:result为字节类型
result = etree.tostring(html)
print(result.decode('utf-8'))
上述代码我故意在Java那一行少写一个</li>,可以看到输出会自动补全:
<html><body><div>
<ul>
<li><a href="www.python.org">Python</a></li>
<li><a href="www.java.com">Java</a></li>
<li><a href="www.csdn.net">CSDN</a></li>
</ul>
</div>
</body></html>
解析为 HTML 文件后,我们可以使用
xpath()
方法来提取我们需要的数据了:
from lxml import etree
html_str = '''
<div>
<ul>
<li><a href="www.python.org">Python</a></li>
<li><a href="www.java.com">Java</a></li>
<li><a href="www.csdn.net">CSDN</a></li>
</ul>
</div>
'''
html=etree.HTML(html_str)
xpath_bds='//@href'
r_list = html.xpath(xpath_bds)
print(r_list)
xpath()
方法使用一个XPath
表达式作为参数,上面那段程序提取出了页面里的所有网址。
详细的
XPath
表达式语法,请参见菜鸟教程:
https://www.runoob.com/xpath/xpath-syntax.html
3.代码实例
lxml 库在爬虫中的使用大概就是这么多了,接下让我们结合前一篇文章(Python 网页请求:requests库的使用),来写一个普通的爬虫程序吧:
import os
import sys
import requests
from lxml import etree
x = requests.get('https://www.csdn.net/')
html = etree.HTML(x.text)
xpath_bds = '//img/@src'
img_list = html.xpath(xpath_bds)
# 创建img文件夹
os.chdir(os.path.dirname(sys.argv[0]))
if not os.path.exists('img'):
os.mkdir('img')
print('创建文件夹成功')
else:
print('文件夹已存在')
# 下载图片
for i in range(len(img_list)):
img = requests.get(img_list[i]).content
if img_list[i].endswith('.jpg'):
with open(f'./img/{i}.jpg', 'wb') as f:
f.write(img)
elif img_list[i].endswith('.jpeg'):
with open(f'./img/{i}.jpeg', 'wb') as f:
f.write(img)
elif img_list[i].endswith('.png'):
with open(f'./img/{i}.png', 'wb') as f:
f.write(img)
else:
print(f'第{i + 1}张图片格式不正确')
continue
print(f'第{i + 1}张图片下载成功')
这个爬虫程序爬取了CSDN首页的所有
.jpg
、.jpeg
、.png
格式的图片,快来自己尝试一下吧!
来源:https://blog.csdn.net/qq_63585949/article/details/126755821
标签:Python,lxml,库
0
投稿
猜你喜欢
jupyter notebook 增加kernel教程
2023-04-27 20:28:43
分享一下Python 开发者节省时间的10个方法
2023-02-14 21:57:33
js模拟类继承小例子
2024-04-16 10:38:29
Python如何发送与接收大型数组
2022-07-26 06:54:54
php上传大文件设置方法
2023-11-21 19:11:22
ERROR 1862 (HY000): Your password has expired. To log in you must change it using a .....
2024-01-12 19:56:51
Python的内置数据类型中的数字
2023-12-29 19:36:37
Python机器学习之决策树算法实例详解
2022-10-06 07:24:37
vue+echarts实现动态折线图的方法与注意
2023-07-02 16:29:06
Django web框架使用url path name详解
2022-01-06 19:43:59
python自动登录12306并自动点击验证码完成登录的实现源代码
2021-07-08 12:50:29
评论是倒序好还是顺序好?
2007-11-09 10:40:00
python 插入日期数据到Oracle实例
2022-09-29 23:51:59
Flask 请求钩子的实现
2022-04-25 21:21:12
git 优雅的撤销中间某次提交方法
2023-12-27 11:12:50
golang gorm中格式化时间问题详解
2023-07-12 09:45:21
Go语言开发中redis的使用详解
2024-02-14 12:58:27
Python pandas DataFrame操作的实现代码
2021-07-24 00:49:43
总结几个非常实用的Python库
2023-02-28 11:39:54
python 使用GDAL实现栅格tif转矢量shp的方式小结
2021-10-02 07:13:56