- 0
- 0
- 约2.02千字
- 约 21页
- 2026-02-07 发布于陕西
- 举报
lxml解析库主讲人:杨海迎
lxml解析库
ElementTree与Element类三大节点查找方法
lxml解析库是lxml处理XML/HTML的“基石”。find()、findall()、xpath()则是基于它们的“精准定位工具”,能高效实现节点查询与数据提取。
核心问题ElementTree与Element类是什么?如何创建它们?三大查找方法怎么用、有何区别?
lxml解析的核心是“文档树”模型,ElementTree与Element类分工明确、相辅相成,共同支撑结构化文档的操作。
一、核心组件:ElementTree与Element类定位:代表文档中的单个节点(如book、title标签);Element类:单个节点的“管理者”核心职责:管理节点属性(如id、price)、文本内容,以及子节点的增删改查;通俗理解:就像文档树中的“单个树枝”,承载具体的内容和关联关系。ElementTree类:整个文档的“掌控者”定位:封装整XML/HTML文档树,是文档级别的操作入口;核心职责:提供文档解析、序列化(生成文档)、全局节点查询等功能;通俗理解:就像文档树的“树根”,掌控着所有节点的整体结构,是操作单个节点(Element)的基础。
ElementTree与Element类ElementTree管“全局”;Element管“局部”,所有节点查找、数据提取都围绕这两个类展开。
创建ElementTree或Element对象是解析的第一步,lxml提供了适配“文件”和“字符串”两种数据源的方法,覆盖绝大多数场景。对象创建:文件与字符串解析
解析文件:etree.parse()二、对象创建:文件与字符串解析
二、对象创建:文件与字符串解析解析字符串
核心用途:解析字符串格式的XML/HTML内容,返回根节点(Element对象)。解析字符串:fromstring()/XML()/HTML()
二、对象创建:文件与字符串解析解析字符串三者区别fromstring()与XML():功能完全一致,解析XML字符串,严格遵循XML语法;HTML():专门解析HTML字符串,自动补全缺失的基础标签(如html、body),容错性更强。
二、对象创建:文件与字符串解析解析XML字符串
三、节点查找:三大方法实战对比方法名称核心功能返回结果适用场景find()查找第一个匹配的子节点单个Element对象(未找到返回None)目标节点唯一(如第一个符合条件的节点)findall()查找所有匹配的子节点Element对象列表(未找到返回空列表)批量提取同类子节点xpath()查找所有匹配的节点(支持绝对/相对路径)节点/文本/属性列表(未找到返回空列表)复杂条件筛选、跨层级查找
四、方法对比:选型技巧2.返回结果处理find():需先判断是否为None,避免空指针错误(如iffirst_book:print(first_book.text));findall()和xpath():返回列表,可直接遍历,无需容错处理(空列表遍历无报错)。1.查找范围差异find()和findall():仅查找当前节点的“直接子节点”(不跨层级,除非路径表达式用//);xpath():支持绝对路径(/root/book)和相对路径(./book),可跨层级查找,灵活性更强。
3.效率与场景选型简单查找单个节点:用find()(简洁高效);批量提取同类子节点:用findall()(语法简洁,无需复杂XPath)。复杂条件筛选(如属性判断、文本包含、跨层级):用xpath()(功能最强)。四、方法对比:选型技巧
使用lxml核心类与查找方法时,这几个要点能帮我们避免错误:解析HTML文件时,需指定parser=etree.HTMLParser(),否则可能解析失败;1.解析器适配2.路径表达式五、技术规范Element对象的get(attr_name)获取属性,比xpath(@attr_name)[0]更容错。3.属性获取find()和findall()的路径默认是“相对当前节点的直接子节点”,跨层级需用//(如findall(.//title));
2个核心类2种创建方式3大查找方法
核心总结:类与方法掌握2个核心类ElementTree(管全局文档)Element(管单个节点)2种创建方式parse()解析文件fromstring()/XML()/HTML()解析字符串3大查找方法find()(找首个)findall()(找所有子节点)xpath()(复杂查找)关键注意事项解析器适配路径表达式属性获取
课后作业本地XML/HTML文件,实操三种查找方法,对比不同路径表达式的查找结
原创力文档

文档评论(0)