【学习笔记】Python - Lxml

Lxml是Python中用于XML和HTML解析的高效库,它基于libxml2和libxslt,提供了C语言级别的速度。Lxml不仅能够自动修正HTML代码,还支持XPath语法进行数据提取。通过pip install lxml可以安装。在使用中,可以先读取HTML文件,然后利用XPath表达式选取特定节点,如选取所有user元素://user,或者选取带有特定属性的节点://li[@attribute='red']。Lxml的强大功能使得它成为Python中处理XML和HTML文档的理想选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Lxml

Lxml库是基于libxm12的XML解析库的Python封装,该模块使用C语言编写,解析的速度比Beautiful Soup更快。Lxml库使用Xpath语法解析定位网页数据。

Lxml库的安装

pip install lxml

Lxml库的使用

1、修正HTML代码

Lxml为XML解析库,但也很好地支持了HTML文档地解析功能,这为使用Lxml库爬取网络信息提供了支持条件。

首先需要导入Lxml库中地etree库,利用etree.HTML进行初始化,返回解析后的Element对象,这里可以看到,Lxml有一个非常实用的功能,就是自动修正了HTML代码(比如标签对漏掉的情况也会自动补齐)。

2、读取HTML文件

将上面的HTML文件拷贝到Sublime中保存为HTML文件。

然后通过Lxml库读取HTML文件中的内容。

3、解析HTML文件

经过上面的步骤,便可以使用requests库获取HTML文件,然后用Lxml库来解析HTML文件。

Xpath语法

Xpath是一门在XML文档中查找信息的语言,对HTML文档又很好的支持。

<user_databaser>

         <user>

                  <name> Jack </name>

                  <sex> Male </sex>

                  <id> 10001 </id>

                  <goal> 100 </goal>

         </user>

</user_databaser>

【基本概念】

  • 父节点:每个元素及属性都有一个父节点,上例中的user元素就是name、sex、id和goal的父节点;
  • 子节点:元素节点可以有0个或者多个子节点,上例中的name、sex、id和goal元素就是user的子节点;
  • 同胞节点:拥有相同父节点,上例中的name、sex、id和goal元素就是同胞节点;
  • 先辈节点:某节点的父节点、父节点的父节点等,上例中的name元素的先辈节点是user和user_database;
  • 后代节点:某个节点的子节点、子节点的子节点等,上例中的user_database元素的后代节点是user、name、sex、id和goal;

Xpath使用路径表达式在XML文档中选取节点,节点是通过沿着路径或者step来选取的。

表达式

描述

nodename

选取此节点的所有子节点

/

从根节点选取

//

从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置

.

选取当前节点

..

选取当前节点的父节点

@

选取属性

根据上例举例说明:

路径表达式

结果

user_databaser

选取元素user_databaser的所有子节点

/user_databaser

选取根元素user_databaser

user_databaser/user

选取属于user_databaser的子元素的所有user元素

//user

选取所有user子元素,不考虑他们在文档中位置

user_databaser//user

选取属于user_databaser元素的后代所有user元素,不管位置

//@attribute

选取名为attribute的所有属性

Xpath中也可以使用通配符来选取位置的元素,常用的就是“*”通配符,它可以匹配任何元素节点。

Xpath语法中的谓语用来查找某个特定的节点或者包含某个指定值的节点,谓语被嵌在方括号中。

路径表达式

结果

/user_databaser/user[1]

选取属于user_databaser子元素的第一个user元素

//li{[@attribute]

选取所有拥有名为attribute属性的li元素

//li{[@attribute=’red’]

选取所有li元素,且这些元素拥有值为red的attribute属性

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SAP剑客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值