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

如何用BeautifulSoup提取内联CSS的width属性?求替代正则方案

替代正则解析内联CSS属性的更优方案

嘿,确实用正则解析内联CSS很容易踩坑——比如属性和冒号之间的空格变化、值里的特殊字符,都可能让你的正则表达式失效。给你两个更稳定的方案,比正则靠谱多了:

方案1:用专业CSS解析库 cssutils

这是专门处理CSS的工具库,能完美兼容各种CSS写法,自动处理格式问题。

首先安装库:

pip install cssutils

然后用下面的代码提取width属性:

import cssutils
from bs4 import BeautifulSoup

html = '<div class="test" style="border-width: 2.5px; width: 203.5px; margin-right: 2.5px; margin-bottom: 2.5px; display: block;"> Test content </div>'
soup = BeautifulSoup(html, 'html.parser')
target_elem = soup.find("div", {"style": True})

# 解析style属性字符串
style_obj = cssutils.parseStyle(target_elem['style'])
width_value = style_obj.getPropertyValue('width')

print(width_value)  # 输出:203.5px

这个方法的优势:

  • 自动忽略属性和值之间的任意空格
  • 能正确处理带!important标记的属性
  • 兼容各种合法的CSS写法,稳定性拉满

方案2:手动拆分style字符串(无需额外库)

如果不想安装新库,也可以手动拆分style的键值对,适合处理常规的内联CSS场景:

from bs4 import BeautifulSoup

html = '<div class="test" style="border-width: 2.5px; width: 203.5px; margin-right: 2.5px; margin-bottom: 2.5px; display: block;"> Test content </div>'
soup = BeautifulSoup(html, 'html.parser')
target_elem = soup.find("div", {"style": True})

# 将style字符串转为字典
style_dict = {}
for part in target_elem['style'].split(';'):
    part = part.strip()
    if not part:  # 跳过空字符串
        continue
    # 只拆分一次,避免值里出现冒号的极端情况
    prop_key, prop_value = part.split(':', 1)
    style_dict[prop_key.strip()] = prop_value.strip()

width_value = style_dict.get('width')
print(width_value)  # 输出:203.5px

这个方法的优势:

  • 零依赖,不用安装任何额外包
  • 逻辑简单易懂,能覆盖99%的常规内联CSS场景
  • 比正则更灵活,不会被格式小变化影响

对比正则来说,这两个方法都能避免正则表达式常见的脆弱性,比如属性名的大小写差异、空格的随意变化等问题。

内容的提问来源于stack exchange,提问作者anurag

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 21:02:33