lxml简明教程

超实用的 Python 库之lxml使用详解 XML(可扩展标记语言)和HTML(超文本标记语言)是广泛用于数据交换和网页构建的标记语言。在Python中,有许多库可以用来解析和处理XML和HTML文档,其中最强大和常用的之一是lxml。lxml是一个高性能、功能丰富的库,它提供了强大的XML和HTML处理功能。本文将深入介绍Python lxml库,包括其基本用法、XPath查询、XML和HTML解析、数据提取和实际应用场景,并提供丰富的示例代码,以帮助大家充分利用这个强大的工具。 阅读详情

最近要做下微信爬虫,之前写个小东西都是直接用正则提取数据就算了,如果需要更稳定的提取数据,还是使用 xpath 定位元素比较可靠。周末没事,从爬虫的角度研究了一下 python xml 相关的库。

Python 标准库中自带了 xml 模块,但是性能不够好,而且缺乏一些人性化的 API,相比之下,第三方库 lxml 是用 Cython 实现的,而且增加了很多实用的功能,可谓爬虫处理网页数据的一件利器。lxml 大部分功能都存在 lxml.etree中,所以下文都假定已经执行了

from lxml import etree

解析 XML 字符串

网页下载下来以后是个字符串的形式,使用etree.fromstring(str)构造一个 etree._ElementTree对象,使用 etree.tostring(t)返回一个字符串

>>> xml_string = '<root><foo id="foo-id" class="foo zoo">Foo</foo><bar>中文</bar><baz></baz></root>'
>>> root = etree.fromstring(xml_string.encode('utf-8')) # 最好传 byte string

>>> etree.tostring(root)
# 默认返回的是 byte string
b'<root>root content<foo id="foo-id" class="foo zoo">Foo</foo><bar>Bar</bar><baz/></root>'

>>> print(etree.tostring(root, pretty_print=True).decode('utf-8'))
#decode 一下变成 unicode
<root>
  <foo id="foo-id" class="foo zoo">Foo</foo>
  <bar>Bar</bar>
  <baz/> # 注意这里没有子节点的 baz 节点被变成了自闭和的标签
</root>

>>> type(root)
<class 'lxml.etree._Element'>

# 可以看出 tostring 返回的是一个_Element类型的对象,也就是整个 xml 树的根节点

Element结构

etree._Element 是一个设计很精妙的结构,可以把他当做一个对象访问当前节点自身的文本节点,可以把他当做一个数组,元素就是他的子节点,可以把它当做一个字典,从而遍历他的属性

>>> root.text
'root content' # 注意只是 root 自身的文本,并不包含子节点的文本
>>> root.tag
'root'
>>> root[0].tag
'foo'
>>> foo = root[0]
>>> for attr, val in foo.items():
...     print(attr, val)
...
id foo-id
class foo zoo
>>> foo.get('id')
'foo-id'
>>> foo.attrib
{'class': 'foo zoo', 'id': 'foo-id'}

Element 和 ElementTree

xml 是一个树形结构,lxml 使用etree._Element和 etree._ElementTree来分别代表树中的节点和树,etree.ELement和 etree.ElementTree 分别是两个工厂函数

>>> t = root.getroottree()
# 获得一个节点对应的树
<lxml.etree._ElementTree object at 0x107295308>

>>> t.getroot() == root
# 使用getroot 返回一个树的根节点
True

>>> foo_tree = etree.ElementTree(root)
# 也可以从一个节点构造一个树,那么这个节点就是这棵树的根
>>> foo_tree.getroot().tag
'foo'

>>> foo.getroottree().tag
'root'
#注意,foo 这个节点的 roottree 仍然是以 root 节点为根的

其他方法如getparent()/getprevious()/getnext()都是显而易见的,不赘述了

XPath

XPath 实在太强大了,在定位元素方面绝对是秒杀 CSS 选择器。在 lxml 中,_Element和 _ElementTree 分别具有xpath 函数,两者的区别在于:

如果是相对路径,_Element.xpath是以当前节点为参考的,_ElementTree.xpath以根为参考
如果是绝对路径,_ElementTree.xpath是以当前节点的getroottree的根节点为参考的

还有,如果 xpaht 表达式应该返回元素的话,总是返回一个数组,即使只有一个元素

>>> foo.xpath('/root')[0].tag
'root'
>>> foo.xpath('.')[0].tag
'foo'
>>>
>>> t.xpath('/root')[0].tag
'root'
>>> t.xpath('.')[0].tag
'root'
>>>

lxml 还支持几个函数 find/findall,他们使用 ElementPath,是一种类似 xpath 的语言,感觉很是奇怪,lxml 的文档描述他是 xpath 的一个子集,暂时不看了。

HTML

最后再来讨论一下 HTML,以上的讨论都是基于 xml 的,HTML 和 xml 还是有些许不同的,lxml 也有一个专门的 html 模块。
比如我们解析 html 的话最好使用html.fromstring(),返回的是lxml.html.HtmlElement,具有上述的所有能力,同时能够更好地兼容 html。

>>> etree.fromstring('<meta charset=utf-8 />')
# 比如这句就会报错,因为属性值没有用引号括起来
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "src/lxml/lxml.etree.pyx", line 3213, in lxml.etree.fromstring (src/lxml/lxml.etree.c:77737)
  File "src/lxml/parser.pxi", line 1830, in lxml.etree._parseMemoryDocument (src/lxml/lxml.etree.c:116674)
  File "src/lxml/parser.pxi", line 1711, in lxml.etree._parseDoc (src/lxml/lxml.etree.c:115220)
  File "src/lxml/parser.pxi", line 1051, in lxml.etree._BaseParser._parseUnicodeDoc (src/lxml/lxml.etree.c:109345)
  File "src/lxml/parser.pxi", line 584, in lxml.etree._ParserContext._handleParseResultDoc (src/lxml/lxml.etree.c:103584)
  File "src/lxml/parser.pxi", line 694, in lxml.etree._handleParseResult (src/lxml/lxml.etree.c:105238)
  File "src/lxml/parser.pxi", line 624, in lxml.etree._raiseParseError (src/lxml/lxml.etree.c:104147)
lxml.etree.XMLSyntaxError: AttValue: " or ' expected, line 1, column 15

>>> html.fromstring('<meta charset=utf-8>')
# 没有问题

html.HtmlElement同时多了几项功能

>>> doc = html.fromstring('<div><p>lorem <span>poium</span></p></div>')

>>> doc.text_content()

'lorem poium' ### 文章原地址:https://www.cnblogs.com/ospider/p/5911339.html

Python中lxml库的用法 前言 前面已经学习了requests和beautifulsoup库的知识,大家可以看Python中Requests库的用法,Python中Beautiful Soup的用法,今天再来学习一下用一种网页解析的库lxml。 lxml是Python语言里和XML以及HTML工作的功能最丰富和最容易使用的库。lxml是为libxml2和libxslt库的一个Python化的绑定。它与众不同的地方是 阅读详情

相关推荐

Python 爬虫入门(五):使用 lxml 解析网页

欢迎来到“Python 爬虫入门”系列的第五篇文章。今天我们将深入了解HTML/XML解析库——lxml,教你如何使用它来解析网页。lxml 是一个Python库,提供了对HTML和XML文件的高效处理能力。它支持XPath和XSLT,使得在大量数据中查找和提取信息变得非常简单。

blues_C的博客 2153

lxml库的基本使用

Python之lxml模块的使用:1. 认识lxml2. lxml中基本使用2.1 安装并导入lxml模块2.2 节点操作:2.3 属性操作:2.4 文本操作2.5 xml文件解析与序列化2.6 lxml命名空间的处理3. 使用lxml解析xml案例4. 使用lxml生成一个xml文件案例:5. 补充:xPath语法5.1 节点选择语法:5.2 节点修饰语法:5.3 谷歌浏览器xpath helper插件的安装和使用xpath helper插件的安装 1. 认识lxml lxml是一款高性能的Python

weixin_57440207的博客 1万+

数据解析:一文掌握Python库 lxml 的详细使用(处理XML和HTML的高性能库)

本文介绍了Python高性能库lxml在XML和HTML处理中的应用。lxml基于C语言编写,具有速度快、API友好的特点,适合处理结构化数据。

数据知道的博客 1万+

lxml解析器详解

lxml库 1.库介绍 lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高。 功能: 解析HTML 文件读取 etree和XPath的配合使用 2.python库lxml的安装 windows系统下的安装: #pip安装 pip3 install lxml #wheel安装 #下载对应系统版本的wheel文件:http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml pip3 install lxml-

qq_53166867的博客 5595

反激开关电源变压器设计实战:从理论到绕制的完整流程解析

本文详细解析了反激开关电源变压器的完整设计流程,从核心理论到实战绕制。文章以24W电源为例,手把手讲解如何根据输入输出电压、功率和频率等关键参数,计算匝比、峰值电流、电感量,并完成磁芯选择、匝数确定、气隙计算及线径选取。重点阐述了CCM模式下的设计要点与绕制工艺,旨在帮助工程师设计出稳定高效的反激变压器,避免常见陷阱。

weixin_29305313的博客 684

四、SVN客户端tortoiseSVN的基本功能介绍

档案浏览器(Repo-browser) 鼠标右键–>tortoiseSVN->版本库浏览器 输入版本库URL地址,进入如菜单界面 版本库浏览器支持SVN及http两种最常用的通信协议 SVN服务器访问方式 方法 模式 访问方法 File:// 直接版本库访问(本地磁盘) http:// 通过配置subversion的WEB服务器的WEBDAV协议 http...

也许是我送你哦 1012

lxml官方入门教程(The lxml.etree Tutorial)翻译

这是一个关于使用lxml.etree处理XML的教程。它简要概述了ElementTree API的主要概念,以及一些简单的增强功能,这些功能可以让您作为程序员的生活更轻松。

shizidushu的博客 1934

FoundationPose实战:从零部署到Demo运行全记录

本文详细记录了FoundationPose从零部署到Demo运行的全过程,包括Ubuntu环境配置、项目部署、依赖安装及常见问题解决方案。特别针对复现过程中的关键步骤如CUDA版本选择、Eigen3安装等提供了实用技巧,帮助开发者高效完成FoundationPose的部署与调试。

weixin_27102543的博客 269

Windows系统安装Python-lxml库(保姆级教程)

博主计算机之前没有联网,所以只能离线安装Python-lxml库,历时两天在相关资料的海洋中查阅、删选终于安装成功。Python-lxml库依赖于Python-setuptools库,但是请读者不要担心,Python-setuptools库时Python3的内置库,也就是将Python3安装成功之时就是Python-setuptools库安装成功之时。链接:Python3的安装教程(保姆级)链接:PyCharm安装教程(保姆级)1.1.成功安装Python。

qq_41663505的博客 2万+

SAGA GIS英文版进行地形分析,计算常用的地形因子等

SAGA GIS中文版是一款专业的自动化地球科学分析系统软件。SAGA GIS最新版界面简洁,操作简便,用户使用时输入要分割的影像,选择要计算特征的影像或者波段,设置越大,得到的斑块越大;反之,则越小,点击Okay,得到分割影像图。SAGA GIS中文版主要通过选择适合你影像的格式,加载影像。 SAGA GIS全称是System for Automated Geoscientific Analyses,是一种用于编辑空间数据的地理信息系统(GIS)计算机程序,它是免费的开源软件,SAGA GIS旨在为科学家

qq_35794085的博客 5645

KNN算法

其原理是在给定的数据集中,根据某个距离度量方法,将测试数据与已知数据集中的所有数据进行距离计算,然后选取K个距离最近的数据作为测试数据的邻居,根据邻居的类别进行投票,将测试数据分类到得票最多的类别中。总之,KNN算法是一种简单而有效的分类方法,它不需要对数据进行训练,可以适用于多种数据类型和应用场景,并且可以通过调整K值或距离阈值等参数来控制算法的复杂度和性能。,KNN算法需要找到K个距离测试样本最近的训练样本,计算它们的类别,并将测试样本归入到得票最多的类别中。则取值为1,否则为0,表示邻居中属于类别。

优快云XXCQ的博客 2632

【RPA开发】lxml 库之 etree 使用详解

lxml 库是 Python 中一个强大的 XML 处理库,简单来说,etree 模块提供了一个简单而灵活的API来解析和操作 XML/HTML 文档。官方网址安装etree 不仅可以创建 xml/html 树,还可以解析及处理 XML/HTML 数据(lxml.html 也是基于 lxml.etree 的),因为它可以方便地从 XML/HTML 文档中选取某些节点。总之,etree 是 lxml 库中最常用的模块之一,可以极大地简化 XML/HTML 数据的处理过程。

尹煜的博客 2万+

uniapp [全端兼容] - 实现接入使用天地图及卫星视图切换功能,在国家天地图上自由切换地图显示类型(卫星视图/地形视图/卫星混合/地形混合/普通视图)天地图切换视图显示改成卫星风格,切换地图图层

uni-app,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,天地图,视图,卫星,地图类型切换,uniAPP天地图,改成卫星视角,在线地图切换,来回切换卫星图,天地图如何实现来回切换卫星图,地形图,卫星视图,VUE3引入天地图卫星版,详细教程示例源码代码,天地图切换卫星用什么api,卫星视角API方法,vue3卫星天地图,能改地图的显示方式,vue3中使用天地图自定义样式切换地图图层,切换报错,加载出错,卫星图太卡,地图图层更换,vue3安装集成天地图详细示例源

🏆 前端领域优质创作者 1万+

python教程lxml详解

解析XML和HTML文档:lxml提供了两种主要的解析器,分别是基于C的解析器和基于Python的解析器。基于C的解析器使用libxml2库,速度较快,而基于Python的解析器则更加容易安装和使用。使用lxml的解析器,可以将XML和HTML文档解析成一个树状结构的Element对象,从而可以通过操作Element对象来访问、修改和操作文档的内容。Element对象:Element对象是lxml中的主要对象,它代表了XML或HTML文档中的一个元素或标签。

欢迎来到爱吃熊掌的鱼的博客 3806

AgentScope 2.0 源码解析-工具系统解读:从内置工具到权限管控的完整实践

本文深入解析AgentScope 2.0工具系统的完整架构,覆盖内置工具集(文件读写、命令执行、搜索匹配)、MCP协议集成(STDIO/HTTP双传输、客户端封装、工作空间网关)、工具包管理与动态分组、权限引擎的多级决策机制(危险路径保护、只读识别、模式控制),以及自定义工具开发流程。通过分层架构图和时序图直观展示组件协作关系,结合安全最佳实践与故障排除指南,为开发者提供从工具使用到安全管控的全链路参考。

program哲学 570

将物理信息神经网络(PINN)应用于微通道湍流的拓扑优化,并结合COMSOL数据进行训练与快速预测

本文提出一种基于物理信息神经网络(PINN)的微通道散热器流场快速预测方法。通过有限组COMSOL仿真数据训练神经网络,结合Navier-Stokes方程和能量方程作为物理约束,构建可快速预测新拓扑结构下速度场和温度场的替代模型。该方法包含数据准备、网络构建、损失函数设计等关键步骤,利用自动微分计算方程残差,显著降低传统CFD优化的计算成本,实现秒级/分钟级的流场预测,为微通道散热器拓扑优化提供高效解决方案。

huanghm88的专栏 536

Python爬虫基础教程——lxml爬取入门

大家好,上次介绍了BeautifulSoup爬虫入门,本篇内容是介绍lxml模块相关教程,主要为Xpath与lxml.cssselect 的基本使用。 一、lxml介绍 引用官方的解释: lxml XML工具箱是C库libxml2和libxslt的Python绑定 。它的独特之处在于它将这些库的速度和XML功能的完整性与本机Python API的简单性结合在一起,该Python API大多数都兼容,但优于著名的 ElementTree API。 lxml.etree是一个非常快速的XML库。这主要..

th1522856954的博客 2282

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

python中lxml模块_Python lxml模块安装教程

lxml是Python中与XML及HTML相关功能中最丰富和最容易使用的库。lxml并不是Python自带的包,而是为libxml2和libxslt库的一个Python化的绑定。它与众不同的地方是它兼顾了这些库的速度和功能完整性,以及纯Python API的简洁性,与大家熟知的ElementTree API兼容但比之更优越!但安装lxml却又有点麻烦,因为存在依赖,直接安装的话用easy_inst...

weixin_39872334的博客 307

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

python爬虫教程(六):lxml库

今天给大家介绍lxml库的基本使用方法。 一、lxml库简介 lxml库是python的第三方库,安装方式也是十分简单,这里就不多赘述。而lxml库的特点就是简单和易上手,并且解析大型文档(特指xml或html文档)的速度也是比较快的,因此写爬虫解析网页的时候它也是我们的一个不错的选择。 二、初始化 使用lxml库的第一个步骤永远是初始化,只有初始化之后我们才可以去使用它的语法。 初始化方法如下: html = etree.HTML(text) 1>参数: text...

csdn1561168266的博客 9124

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

python安装lxml库过程_Python lxml模块安装教程

lxml是Python中与XML及HTML相关功能中最丰富和最容易使用的库。lxml并不是Python自带的包,而是为libxml2和libxslt库的一个Python化的绑定。它与众不同的地方是它兼顾了这些库的速度和功能完整性,以及纯Python API的简洁性,与大家熟知的ElementTree API兼容但比之更优越!但安装lxml却又有点麻烦,因为存在依赖,直接安装的话用easy_inst...

weixin_36267013的博客 4171

python添加lxml库_Python爬虫基础教程——lxml爬取入门

大家好,上次介绍了BeautifulSoup爬虫入门,本篇内容是介绍lxml模块相关教程,主要为Xpath与lxml.cssselect 的基本使用。一、lxml介绍引用官方的解释:lxml XML工具箱是C库libxml2和libxslt的Python绑定 。它的独特之处在于它将这些库的速度和XML功能的完整性与本机Python API的简单性结合在一起,该Python API大多数都兼容,但优...

weixin_34736362的博客 548

lxml python_python lxml

lxml pythonPython lxml is the most feature-rich and easy-to-use library for processing XML and HTML data. Python scripts are written to perform many tasks like Web scraping and parsing XML. In this le...

从零开始的教程世界 608
下一篇: 关于 tf.app.flags
invisible_2018
博客等级 码龄15年 28粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值