跳转至

Soup 性能测试

zerodep soup 与 beautifulsoup4 的性能对比。

测试环境

  • CPU: x86_64 Linux
  • Python: 3.12
  • 工具: pytest-benchmark 5.2.3(报告均值)
  • 对标库: beautifulsoup4 4.14.3
  • 最后更新: 2026-04-21

实现对比

实现 文件/包 说明
zerodep soup.py 单文件 HTML 解析器,仅标准库
beautifulsoup4 (参考库) 流行的 HTML/XML 解析器(使用 html.parser 后端)

测试数据

规模 描述
Small 简单 HTML 页面,少量元素(约 200 字符)
Medium 包含导航、列表和嵌套 div 的结构化页面(约 2 KB)
Large 包含表格、表单、脚本和深层嵌套的复杂页面(约 10 KB)

解析 + 查询性能(均值)

数据规模 zerodep beautifulsoup4 倍数
Small 276.5 μs 740.3 μs 快 2.7x
Medium 2,190.0 μs 6,140.0 μs 快 2.8x
Large 24,580.0 μs 63,020.0 μs 快 2.6x

序列化性能(均值)

数据规模 zerodep beautifulsoup4 倍数
Small 307.3 μs 986.4 μs 快 3.2x
Medium 2,230.0 μs 8,310.0 μs 快 3.7x
Large 25,290.0 μs 83,800.0 μs 快 3.3x

树操作性能(均值)

数据规模 zerodep beautifulsoup4 倍数
Small 333.9 μs 888.8 μs 快 2.7x
Medium 2,370.0 μs 6,810.0 μs 快 2.9x
Large 26,780.0 μs 67,650.0 μs 快 2.5x

CSS 选择器性能(均值)

数据规模 zerodep beautifulsoup4 倍数
Small 286.0 μs 805.9 μs 快 2.8x
Medium 2,248.7 μs 6,466.3 μs 快 2.9x
Large 23,072.9 μs 65,167.6 μs 快 2.8x

伪选择器性能(均值)

数据规模 zerodep beautifulsoup4 倍数
Small 303.4 μs 939.4 μs 快 3.1x
Medium 2,308.3 μs 6,948.2 μs 快 3.0x
Large 23,489.7 μs 70,329.8 μs 快 3.0x

要点总结

  • 全规模、全操作快 2.5-3.7 倍 —— zerodep 直接从 html.parser 构建最小化 DOM 树,无需 BeautifulSoup 的抽象层(NavigableString、PageElement 层级、soupsieve 集成)。
  • 序列化加速比最大 —— 快 3.2-3.7 倍,zerodep 的轻量节点结构在树到字符串转换时开销更小。
  • CSS 选择器和伪选择器约快 3 倍 —— 尽管 BS4 委托给优化过的 soupsieve 库,zerodep 的内联选择器引擎避免了跨库调度开销。
  • 各工作负载表现一致 —— 解析(2.7-2.8x)、序列化(3.2-3.7x)、树操作(2.5-2.9x)和 CSS 选择器(2.8-3.1x)均表现出显著优势。
  • 无需任何 pip 依赖 —— zerodep 仅使用标准库 rehtml.parser。BeautifulSoup 需要 soupsieve,可选 lxmlhtml5lib

自行运行

pip install pytest pytest-benchmark beautifulsoup4
pytest soup/test_soup_benchmark.py --benchmark-only -v

最新 CI 结果

每次发版时通过 Benchmark CI 自动更新。