lxml库 xpath

LXML库XPATH解析HTML 一:简述 基于Python做爬虫,在html页面爬取,解析方面,Xpath有极大的优势,也是由于LXML库的丰富功能,使爬虫越来越简单。 二:LXML库安装 pip install lxml 1:AttributeError: module ‘lxml’ has no attribute ‘etree’; 原因:anaconda中base环境中如果有lxml包的话,虚拟环境就会报错。 解决方案:在... 阅读详情

 

lxml 是 一个HTML/XML的解析器,主要的功能是如何解析和提取 HTML/XML 数据。
lxml和正则一样,也是用 C 实现的,是一款高性能的 Python HTML/XML 解析器,我们可以利用之前学习的XPath语法,来快速的定位特定元素以及节点信息。
lxml python 官方文档:http://lxml.de/index.html
需要安装C语言库,可使用 pip 安装:pip install lxml(或通过wheel方式安装)

初步使用

我们利用它来解析 HTML 代码,简单示例:

# lxml_test.py

# 使用 lxml 的 etree 库
from lxml import etree 

text = '''
<div>
    <ul>
         <li class="item-0"><a href="link1.html">first item</a></li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-inactive"><a href="link3.html">third item</a></li>
         <li class="item-1"><a href="link4.html">fourth item</a></li>
         <li class="item-0"><a href="link5.html">fifth item</a> # 注意,此处缺少一个 </li> 闭合标签
     </ul>
 </div>
'''

#利用etree.HTML,将字符串解析为HTML文档
html = etree.HTML(text) 

# 按字符串序列化HTML文档
result = etree.tostring(html) 

print(result)

输出结果:

<html><body>
<div>
    <ul>
         <li class="item-0"><a href="link1.html">first item</a></li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-inactive"><a href="link3.html">third item</a></li>
         <li class="item-1"><a href="link4.html">fourth item</a></li>
         <li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
 </div>
</body></html>

lxml 可以自动修正 html 代码,例子里不仅补全了 li 标签,还添加了 body,html 标签。

文件读取

除了直接读取字符串,lxml还支持从文件里读取内容。我们新建一个hello.html文件:

<!-- hello.html -->

<div>
    <ul>
         <li class="item-0"><a href="link1.html">first item</a></li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-inactive"><a href="link3.html"><span class="bold">third item</span></a></li>
         <li class="item-1"><a href="link4.html">fourth item</a></li>
         <li class="item-0"><a href="link5.html">fifth item</a></li>
     </ul>
 </div>

再利用 etree.parse() 方法来读取文件。

# lxml_parse.py

from lxml import etree

# 读取外部文件 hello.html
html = etree.parse('./hello.html')
result = etree.tostring(html, pretty_print=True)

print(result)

输出结果与之前相同:

<html><body>
<div>
    <ul>
         <li class="item-0"><a href="link1.html">first item</a></li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-inactive"><a href="link3.html">third item</a></li>
         <li class="item-1"><a href="link4.html">fourth item</a></li>
         <li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
 </div>
</body></html>

XPath实例测试

1. 获取所有的 <li> 标签

# xpath_li.py

from lxml import etree

html = etree.parse('hello.html')
print type(html)  # 显示etree.parse() 返回类型

result = html.xpath('//li')

print result  # 打印<li>标签的元素集合
print len(result)
print type(result)
print type(result[0])

输出结果:

<type 'lxml.etree._ElementTree'>
[<Element li at 0x1014e0e18>, <Element li at 0x1014e0ef0>, <Element li at 0x1014e0f38>, <Element li at 0x1014e0f80>, <Element li at 0x1014e0fc8>]
5
<type 'list'>
<type 'lxml.etree._Element'>

2. 继续获取<li> 标签的所有 class属性

# xpath_li.py

from lxml import etree

html = etree.parse('hello.html')
result = html.xpath('//li/@class')

print result

运行结果

['item-0', 'item-1', 'item-inactive', 'item-1', 'item-0']

3. 继续获取<li>标签下hre 为 link1.html 的 <a> 标签

# xpath_li.py

from lxml import etree

html = etree.parse('hello.html')
result = html.xpath('//li/a[@href="link1.html"]')

print result

运行结果

[<Element a at 0x10ffaae18>]

4. 获取<li> 标签下的所有 <span> 标签

# xpath_li.py

from lxml import etree

html = etree.parse('hello.html')

#result = html.xpath('//li/span')
#注意这么写是不对的:
#因为 / 是用来获取子元素的,而 <span> 并不是 <li> 的子元素,所以,要用双斜杠

result = html.xpath('//li//span')

print result

运行结果

[<Element span at 0x10d698e18>]

5. 获取 <li> 标签下的<a>标签里的所有 class

# xpath_li.py

from lxml import etree

html = etree.parse('hello.html')
result = html.xpath('//li/a//@class')

print result

运行结果

['blod']

6. 获取最后一个 <li> 的 <a> 的 href

# xpath_li.py

from lxml import etree

html = etree.parse('hello.html')

result = html.xpath('//li[last()]/a/@href')
# last() 可以找到最后一个元素

print result

运行结果

['link5.html']

7. 获取倒数第二个元素的内容

# xpath_li.py

from lxml import etree

html = etree.parse('hello.html')
result = html.xpath('//li[last()-1]/a')

# text 方法可以获取元素内容
print result[0].text

运行结果

fourth item

8. 获取 class 值为 bold 的标签名

# xpath_li.py

from lxml import etree

html = etree.parse('hello.html')

result = html.xpath('//*[@class="bold"]')

# tag方法可以获取标签名
print result[0].tag

运行结果

span

9. 模糊查询

from lxml import etree

html = etree.parse('hello.html')
#               xx[contains(@属性,"查询条件(模糊 %a%)")]
result = html.xpath('//li[contains(@class, "1")]')
print result

个人总结:

1.要使用xpath必须导入lxml库 : from lxml import etree
2.要把爬下来的字符串解析为 html 文档 html = etree.HTML(text) 或者 html = etree.parse('./hello.html')

  1. xpath返回的是一个列表

 


转自:https://www.jianshu.com/p/f4c3efd3eb4d
作者:尘世gu行

Python 中的 Lxml 库与 XPath 用法 阅读详情

相关推荐

CMOS图像传感器系列--(四)HDR之LOFIC技术

CMOS图像传感器HDR技术之LOFIC解析 LOFIC(横向溢出积分电容器)技术是当前高动态范围成像的重要方案,通过在像素光电二极管旁设置高密度电容器收集溢出电荷,有效保留高光细节。该技术采用特殊像素结构,通过skim level触发电荷转移,实现单帧HDR成像。然而LOFIC存在显著局限性:高光区域噪声明显且难以消除,动态范围拓展不均衡(主要优化亮部),需复杂MIM工艺导致成本升高。为应对挑战,行业提出混合方案(如结合DCG技术)和工艺改进方向。OmniVision最新车载传感器OX08D10就采用了L

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 5797

lxml解析html简单使用

1.解析html字符串:使用lxml.etree.HTML进行解析,示例代码如下: htmlElement = etree.HTML(text) print (etree.tostring(htmlElement,encoding='utf-8').decode('utf-8')) 2.解析html文件:使用lxml.etree.parse进行解析,示例代码如下: htmlElement...

铁马冰河入梦来 2139

Python实现支付宝转账接口

由于工作需要使用python开发一个自动转账接口,记录一下开发过程。 首先需要在蚂蚁金服上申请开通开发者账户,有了开发者账户就可以使用沙箱进行开发了。 在开发之前我们需要在沙箱应用中填写密钥,密钥的获取可以使用阿里提供的工具包自动生成。 前期准备工作完成了,接下来是编写代码部分。主要用到了python-alipay-sdk库,使用pip安装即可,如果安装的过程中遇到问题推荐使用Anaconda...

FanMLei的博客 8516

python爬虫 from lxml import etree 导入模块报错原因

环境:python3.8.5 + lxml4.6.3 编辑器:PyCharm 1. 首先使用解释器环境导入模块看看:from lxml import etree 可以正常读取HTML代码,而且还可以自动匹配提示,如下: 还有一种导入方式: from lxml import html etree = html.etree 同样可以正常解析代码,而且自动匹配提示 2. 虚拟环境导入模块:from lxml import etree 有一个报错信息,我万万没想到的是程序居然可以.

SLQ1893的博客 2万+

DAIC-WOZ抑郁数据集实战:从申请到特征提取的全流程避坑指南

本文详细解析了DAIC-WOZ抑郁数据集从申请到特征提取的全流程,提供了实用的避坑指南和代码模板。涵盖数据获取技巧、多模态特征工程(面部动作单元、音频特征、文本处理)以及样本不平衡解决方案,帮助研究者高效处理这一经典抑郁分析数据集。

weixin_29196315的博客 172

STM32开发 -- 4G模块开发详解(1)

这部分一直再看,资料都已经整理好了,但是一直没有汇总。接下来就详细的看一下,GSM这部分是怎么实现的。

不积跬步,无以至千里 5万+

【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万+

Chrome DevTools MCP 实战完整教程

本教程介绍了Chrome DevTools MCP(Model Context Protocol)在智能Web测试中的应用。该系统通过MCP协议将Chrome开发者工具能力标准化,并与AI结合,提供了统一的测试解决方案。核心功能包括智能自动化、深度调试分析和性能监控优化。教程详细讲解了环境搭建、MCP服务器配置、参数说明及多种工具集(输入自动化、导航、设备仿真、性能分析等)的使用方法。通过mcp-use库的MCPAgent和MCPClient组件,用户可以轻松实现自然语言驱动的浏览器操作和测试流程管理。

blues_C的博客 3805

Python爬虫——Python lxml库的安装和使用

lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 Xpath 表达式提供了良好的支持,因此能够了高效地解析 HTML/XML 文档。这里讲解如何通过 lxml 库解析 HTML 文档。

Itmastergo的博客 4398

基于YOLOv11与相机标定的齿轮尺寸测量系统

本文详细介绍了一种基于深度学习的目标检测算法YOLOv11与相机标定技术相结合的齿轮尺寸自动测量系统。该系统能够实时检测图像中的齿轮目标,并精确测量其关键尺寸参数,包括齿顶圆直径、齿根圆直径、模数等。我们构建了完整的深度学习解决方案,包含数据采集与标注、模型训练、相机标定、尺寸测量算法以及用户友好的UI界面。本文提供了完整的代码实现,并推荐了相关的参考数据集,为工业视觉检测领域提供了实用的技术方案。关键词:YOLOv11;齿轮检测;尺寸测量;相机标定;深度学习;工业视觉python。

YOLO 411

199、影像技术 roadmap 规划:未来移动影像的技术趋势与芯片算力展望

本文探讨了未来移动影像技术的发展趋势与芯片算力规划。作者从实际案例出发,指出影像技术演进需平衡传感器、ISP、算力和功耗。文章分为三部分:1)传感器将从堆像素转向提升信息密度,重点关注双层晶体管结构、混合快门和多光谱技术;2)ISP架构将向可编程计算单元转型,强调神经网络加速、硬件化多帧融合和语义处理;3)芯片算力瓶颈在于数据搬运,需优化存算一体架构、专用DMA和统一内存。最后给出五点建议:避免盲目追高像素、重视持续功耗、平衡ISP灵活性、预留算力余量、加强传感器与ISP协同设计。作者强调,影像技术的突破在

sundong_81的博客 60

Python之lxml模块的etree类的使用

Python之lxml模块的etree类的使用 lxml的安装与etree类的导入 将html字符串转化为Element对象,且elment对象的方法 element对象的xptah方法 1.lxml模块的安装 安装方式:在终端cmd下利用pip命令安装即可(保证网络畅通) pip install lxml 2.element对象 element对象是xpath语法的使用对象,element对象可由html字符串转化 利用etree.HTML()将html字符串转化为element对象 , fro

LOVE_XUAN521的专栏 4671

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

xpath和lxml库的使用

1. xml结构如下所示。

happy_working1的博客 2412

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Xpath语法与lxml库

Xpath语法与lxml库

weixin_39926295的博客 1273

Python的lxml库学习之XPATH语法

预备阅读:Python中lxml库的用法 前言 前面已经学习了Python的lxml库,从库的名称来看,lxml包含了xml,所以lxml同样可以解析XML文档,而lxml使用的就是XPATH语法。下面做一下简单介绍。 XPath语法 XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。XPath 是 W3C XSLT 标准的主

数据之魅的博客 1911

XPath与lxml库网页解析

即为路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。XPath基于XML的,提供在数据结构树中找寻节点的能力。起初XPath的提出的初衷是将其作为一个通用的、介于与XSL间的语法模型。但是XPath很快地被开发者采用来当作小型。

xjiet的博客 1003

MRAM+AVR工业存储系统:零延迟非易失写入实战

非易失存储是嵌入式系统在断电场景下保障数据完整性的基础技术,其核心原理在于利用物理机制实现掉电后信息持久保持。传统Flash和EEPROM受限于擦除周期、写入延迟与寿命瓶颈,在高频日志、宽温域、强干扰等工业现场极易失效;而MRAM凭借磁隧道结的自旋电子特性,实现纳秒级写入、无限次擦写及全温域稳定,天然适配PLC、传感器、电表等对确定性要求严苛的终端节点。本文以MR25H40CDF MRAM芯片与ATmega644P AVR单片机为载体,详解从供电协同、SPI时序容错、PCB抗扰布局到裸机驱动开发的全链路工业

weixin_33843947的博客 524

XPath语法及lxml库初探

是 XPath 中的轴步,它表示从当前文档的根节点开始,在整个文档树中递归地查找符合条件的节点。也就是说,它会在文档的所有层级里寻找匹配的节点,不管节点处于多深的嵌套层次。//:表示在当前节点的所有子孙节点中进行递归查找,不限于直接子节点。同样用于递归查找节点,不过它是从当前节点开始,而不是从文档的根节点开始。/:表示从文档的根节点开始选择,用于绝对路径,指定从根节点开始的完整路径。会在当前节点及其所有后代节点中查找符合条件的节点。.//:从当前节点开始,递归查找其所有后代节点。从根节点开始查找,而。

Mazhenfeng_的博客 499

利用 lxml 库的XPath()方法在网页中快速查找元素

XPath() 方法是 Element 对象的一个实例方法,用于在该特定元素上执行 XPath 查询。

book_dw5189的博客 2468

lxml库和Xpath语法

lxml库 lxml库的安装 pip install lxml xpath 语法 父节点 子节点 平行节点 / 从根节点选取 // 从根节点开始匹配,而不考虑它们的位置。 /text() 选取文本 @ 选取属性 s from lxml import etree respons...

Soraa的博客 392

python etree库_Xpath语法与lxml库的用法(etree_xpath)

来一段代码先:importrequestsfrom lxml importetreehtml=requests.get('https://python123.io/ws/demo.html').texttree=etree.HTML(html)print(tree.xpath('//p[@class="title"]/b/text()'))#列表类型print(tree.xpath('//a[@c...

weixin_35607076的博客 2697

数据提取-XPath语法与lxml库

XPath简介 XPath(XML Path Language) 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。因此,对 XPath 的理解是很多高级 XML 应用的基础。 XPath开发工具 Chrome插件XPath ...

十五十六 848

XPath与lxml库

XPath及开发工具         XPath, 全称XMLPath Language ,即 XML路径语言,它是一门在XML 文档中查找信息的语言。它最初是用来搜寻XML文档的,但是它同样适用于HTML 文档的搜索。所以在做爬虫时,可以使用 XPath 来做相应的信息抽取。 XPath开发工具: Chrome插件...

weixin_43967584的博客 548

Xpath语法和lxml库

文章目录XPath简介选取节点谓语(Predicates)选取未知节点XPath的运算符lxml库解析 HTML 代码文件读取实例测试 XPath简介 XPath (XML Path Language) 是一门在 XML 文档中查找信息的语言,可用来在 XML 文档中对元素和属性进 行遍历。 XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统...

妖月的博客 485
上一篇: Selenium+PhantomJS使用详解
下一篇: 二:linux基础-认识linux目录-查看linux信息
Deeply_bless
博客等级 码龄9年 21粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值