You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在BeautifulSoup中获取带空格的HTML属性?

解决方法

要拿到属性值的原始文本(包括末尾空格),别用默认的解析逻辑——它们都会自动规范化属性值。推荐用lxml库,它能配置解析器保留原始空格,而且处理大文件(11000+行)的性能完全没问题。

具体操作

  1. 先安装lxml:
pip install lxml
  1. 创建解析器时开启preserve_whitespace_in_attr_values选项,这个参数会让解析器不碰属性值里的首尾空格:
from lxml import etree

# 读取HTML内容(处理本地文件的话,直接用etree.parse读取)
html_content = '''<html lang="en" class="no-js">
    <div>
        <p class="price ">
            3.75
        </p>
        <p>21</p>
    </div>
</html>'''

# 配置解析器,保留属性原始空格格式
parser = etree.HTMLParser(preserve_whitespace_in_attr_values=True)
tree = etree.fromstring(html_content, parser=parser)

# 定位到带class属性的目标p标签
target_p = tree.xpath('//p[@class]')[0]

# 获取原始class属性值
raw_class = target_p.attrib['class']
print(repr(raw_class))  # 输出结果: 'price '

原理说明

  • 不管是BeautifulSoup还是默认配置的lxml,都会自动对属性值做「规范化」处理:去掉首尾空格、合并内部连续空格,这就是你之前拿不到末尾空格的核心原因。
  • 开启preserve_whitespace_in_attr_values后,lxml会严格保留属性值的原始格式,完全符合你的需求。
  • lxml是基于C实现的解析库,处理大文件的速度和内存占用都比正则表达式靠谱得多,11000行的HTML文件能轻松应对。

如果是处理本地HTML文件,直接替换成以下代码读取:

tree = etree.parse('your_html_file.html', parser=parser)

内容的提问来源于stack exchange,提问作者mauro maurosayan5 baeza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 00:55:07