Python 文档解析:lxml库的使用

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: lxml 是 Python 常用的文档解析库,能够高效地解析 HTML/XML 文档,常用于 Python 爬虫。lxml 为第三方库,需要我们通过pip命令安装。这个爬虫程序爬取了CSDN首页的所有.jpg、.jpeg、.png格式的图片,快来自己尝试一下吧!
✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。
🍎个人主页: 小嗷犬的博客
🍊个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。
🥭本文内容:Python 文档解析:lxml库的使用

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格式的图片,快来自己尝试一下吧!
目录
相关文章
|
15天前
|
XML JSON 数据库
Python的标准库
Python的标准库
136 77
|
10天前
|
数据采集 JSON API
如何利用Python爬虫淘宝商品详情高级版(item_get_pro)API接口及返回值解析说明
本文介绍了如何利用Python爬虫技术调用淘宝商品详情高级版API接口(item_get_pro),获取商品的详细信息,包括标题、价格、销量等。文章涵盖了环境准备、API权限申请、请求构建和返回值解析等内容,强调了数据获取的合规性和安全性。
|
8天前
|
数据挖掘 vr&ar C++
让UE自动运行Python脚本:实现与实例解析
本文介绍如何配置Unreal Engine(UE)以自动运行Python脚本,提高开发效率。通过安装Python、配置UE环境及使用第三方插件,实现Python与UE的集成。结合蓝图和C++示例,展示自动化任务处理、关卡生成及数据分析等应用场景。
58 5
|
16天前
|
XML JSON 数据库
Python的标准库
Python的标准库
44 11
|
16天前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
59 8
|
21天前
|
存储 缓存 Python
Python中的装饰器深度解析与实践
在Python的世界里,装饰器如同一位神秘的魔法师,它拥有改变函数行为的能力。本文将揭开装饰器的神秘面纱,通过直观的代码示例,引导你理解其工作原理,并掌握如何在实际项目中灵活运用这一强大的工具。从基础到进阶,我们将一起探索装饰器的魅力所在。
|
25天前
|
Android开发 开发者 Python
通过标签清理微信好友:Python自动化脚本解析
微信已成为日常生活中的重要社交工具,但随着使用时间增长,好友列表可能变得臃肿。本文介绍了一个基于 Python 的自动化脚本,利用 `uiautomator2` 库,通过模拟用户操作实现根据标签批量清理微信好友的功能。脚本包括环境准备、类定义、方法实现等部分,详细解析了如何通过标签筛选并删除好友,适合需要批量管理微信好友的用户。
35 7
|
24天前
|
安全 API 文件存储
Yagmail邮件发送库:如何用Python实现自动化邮件营销?
本文详细介绍了如何使用Yagmail库实现自动化邮件营销。Yagmail是一个简洁强大的Python库,能简化邮件发送流程,支持文本、HTML邮件及附件发送,适用于数字营销场景。文章涵盖了Yagmail的基本使用、高级功能、案例分析及最佳实践,帮助读者轻松上手。
34 4
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
77 2
|
3天前
|
存储 设计模式 算法
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: • 模板方法模式 • 策略模式 • 命令模式 • 职责链模式 • 状态模式 • 观察者模式 • 中介者模式 • 迭代器模式 • 访问者模式 • 备忘录模式 • 解释器模式
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析