Python中最宽容的HTML解析器是什么?

4 投票
4 回答
1605 浏览
提问于 2025-04-16 22:29

我有一些随机的HTML代码,我用BeautifulSoup来解析它,但大多数情况下(超过70%)它都处理不了。我试过使用BeautifulSoup的3.0.8和3.2.0版本(3.1.0及以上版本有一些问题),但结果几乎是一样的。

我能想到的Python中有几个HTML解析器选项:

  • BeautifulSoup
  • lxml
  • pyquery

我打算测试这些解析器,但我想知道在你们的测试中,哪个解析器最能容错,甚至能尝试解析一些糟糕的HTML。

4 个回答

2

有些网页很难用其他工具处理,比如那些里面有嵌套的 <form> 元素的网页。在这种情况下,我发现使用 MinimalSoupICantBelieveItsBeautifulSoup 这两个工具效果不错。它们各自能处理一些对方处理不了的错误,所以有时候你需要同时尝试这两个工具。

3

它们都是可以的。我还没有遇到过任何一个网页是lxml.html无法解析的。如果lxml在你尝试解析的页面上出错,你可以先用一些正则表达式处理一下这些页面,让lxml能够顺利解析。

lxml本身比较严格,但lxml.html是一个不同的解析器,可以处理非常糟糕的html。如果html实在太糟糕,lxml还提供了lxml.html.soupparser,这个可以和BeautifulSoup库一起使用。

关于如何使用lxml.html解析糟糕的html,这里有一些方法介绍:http://lxml.de/elementsoup.html

2

我最后选择使用BeautifulSoup 4.0配合html5lib来解析网页,这样的组合对代码的要求宽松了很多。经过一些代码的调整,现在运行得相当不错,感谢大家的建议。

撰写回答