Python中除了BeautifulSoup(BS4),还有其他能精简html代码的库吗?

《 span lang="EN-US" style="font-size: 16pt;"》天空《/span 》《 p class="MsoNormal" style="text-indent:28.0pt;mso-char-indent-count:2.0;line-height:20.0pt;mso-line-height-rule:exactly"》

我想把类似上面这样的 html 代码(为了方便发布,我把尖括号换成了《》)精简下,精简成下面这样:

《 span 》天空《/span 》《 p style="text-indent:28.0pt;line-height:20.0pt;"》

能看出,我把《 span 》中的 lang 和字号属性删掉了,把《 p 》中 style 属性里的首行缩进和行高留了下来,删除了其他的。 我想知道除了 BS4,其他还有能处理我这个需求的库吗? BS4 能处理 lang、class 这样的属性,但是 style 里面的属性没法处理。


Python中除了BeautifulSoup(BS4),还有其他能精简html代码的库吗?

12 回复

BS 可以获取到 inline style 的,用 element[‘style’] 就行,不过如果如果你是要把 style 当作一个 dict 这种来处理 BS 好像确实没有自带。

不过你可以把 style string 喂给一个 CSS parser,然后按要求处理完再写回去,这样应该可以吧。

Python 的 CSS parser 应该有很多吧……


当然有。除了BeautifulSoup,lxmlhtml5lib是更底层的解析库,但如果你要“精简”HTML(比如压缩、移除空白、删除注释),它们通常和BeautifulSoup配合使用。

不过,如果你的核心需求是“精简”或“压缩”HTML代码本身,而不是解析和提取,那么htmlmin库可能更直接。它专门用来移除HTML中所有不必要的字符(空格、换行、注释等),同时保持HTML结构的完整性。

示例:使用 htmlmin 压缩HTML

import htmlmin

# 原始的、格式混乱的HTML
dirty_html = """
<!DOCTYPE html>
<html>
    <head>
        <title> 测试页面 </title>
    </head>
    <body>
        <div class="content">
            <!-- 这是一个注释 -->
            <p>Hello, World!</p>
        </div>
    </body>
</html>
"""

# 使用 htmlmin.minify 进行压缩
minified_html = htmlmin.minify(dirty_html,
                                remove_comments=True,   # 移除注释
                                remove_empty_space=True # 移除空白
                                )

print(minified_html)

输出结果:

<!DOCTYPE html><html><head><title> 测试页面 </title></head><body><div class="content"><p>Hello, World!</p></div></body></html>

关键点:

  1. htmlmin: 专门用于HTML最小化/压缩的库。安装:pip install htmlmin
  2. minify()函数: 核心函数,通过参数控制是否移除注释、空白等。
  3. 与BeautifulSoup的区别: BeautifulSoup主要用于解析、遍历和修改HTML/XML文档树,其prettify()方法甚至会让代码更“美观”(增加缩进)。而htmlmin是反其道而行之,专门用于生产环境的代码压缩,减少文件体积。

总结建议: 如果需要压缩HTML代码体积,直接用htmlmin;如果需要解析和操作文档结构,再用BeautifulSoup或lxml

只针对这个例子,我同意一楼的,我印象中似乎找不到能单独处理某个属性中的某个子属性,把 style 拎出来,按照";"分割成 dict,自己写个函数再拼装回去,text-indent line-heigh,不是很优雅,但好像没有什么更好的解决方案的,我已知的库最小处理单元就是属性本身了。

lxml,w3lib 这两个可以处理一部分,style 需要自己写处理器




看来只能自己再写函数了,其实我觉得过渡依赖 bs4 也不是好事,就怕以后升级某些功能被修改了更麻烦。

好久不见 7s。。。

不太理解这个需求 如果只是几个标签的解个 css 需要保留 其他的属性都删除 直接用正则比较好

pyquery 滑稽

最麻烦的地方在 style 里,比如有一些表格的 style 里会有表格线是需要保留的,但同时还有一些像字体字号之类的需要删除的。用正则不太好做。

倒是真的好久没上 V2 了……

回到顶部