在Python的BeautifulSoup库中,除了常用的html解析器,还支持xml解析器,专门用于处理结构规范的xml格式数据,比如接口返回的xml响应、本地xml配置文件等场景,使用xml解析器可以更精准地解析xml的层级结构和标签属性。

xml解析器的安装准备
BeautifulSoup的xml解析器依赖lxml库,使用前需要先安装对应的依赖包,执行以下命令即可完成安装:
# 安装beautifulsoup4和lxml依赖 pip install beautifulsoup4 lxml
基础使用步骤
使用BeautifulSoup的xml解析器只需要指定解析器类型为xml即可,基础使用流程如下:
1. 导入库并初始化解析对象
首先将待解析的xml内容传入BeautifulSoup,同时指定解析器为xml:
from bs4 import BeautifulSoup
# 待解析的xml字符串示例
xml_content = """
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="编程">
<title>Python基础教程</title>
<author>张三</author>
<price>89.00</price>
</book>
<book category="文学">
<title>散文精选</title>
<author>李四</author>
<price>45.00</price>
&;/book>
</bookstore>
"""
# 初始化BeautifulSoup对象,指定解析器为xml
soup = BeautifulSoup(xml_content, "xml")
2. 解析xml节点内容
初始化完成后,就可以像操作html内容一样查找和提取xml中的节点信息:
# 获取根节点
root = soup.bookstore
print("根节点名称:", root.name)
# 查找所有book节点
book_list = soup.find_all("book")
for book in book_list:
# 获取book节点的category属性
category = book.get("category")
# 获取子节点内容
title = book.title.text
author = book.author.text
price = book.price.text
print(f"分类:{category},书名:{title},作者:{author},价格:{price}")
xml解析器和html解析器的区别
很多用户会混淆两种解析器的使用场景,两者的核心区别如下:
| 对比项 | xml解析器 | html解析器 |
|---|---|---|
| 适用内容 | 结构规范的xml格式内容 | html网页内容,允许标签不闭合等不规范写法 |
| 标签处理 | 严格校验标签闭合,不闭合会报错 | 自动补全未闭合的标签 |
| 解析速度 | 相对更快 | 相对更慢 |
常见注意事项
- 如果待解析的xml内容中有自定义命名空间,xml解析器会完整保留命名空间前缀,查找节点时需要带上完整前缀
- 当xml内容中存在<![CDATA[ ]]>包裹的内容时,xml解析器会将其作为普通文本处理,直接通过
.text属性即可获取 - 如果解析本地xml文件,只需要先读取文件内容再传入BeautifulSoup即可,不需要修改解析器参数
注意:如果传入的xml内容不符合xml规范,比如标签未闭合、特殊字符未转义,使用xml解析器会直接抛出解析错误,此时需要优先修正xml内容格式。
本地xml文件解析示例
如果是解析本地存储的xml文件,代码示例如下:
from bs4 import BeautifulSoup
# 读取本地xml文件内容
with open("test.xml", "r", encoding="utf-8") as f:
xml_content = f.read()
# 使用xml解析器解析
soup = BeautifulSoup(xml_content, "xml")
# 后续操作和解析字符串内容一致
first_book_title = soup.book.title.text
print("第一本书的书名:", first_book_title)
PythonBeautifulSoupxml_parser网页解析修改时间:2026-07-07 10:36:25