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

时间:2011-07-29 08:22:02

标签: python html-parsing beautifulsoup lxml pyquery

我有一些随机HTML,我使用BeautifulSoup来解析它,但在大多数情况下(> 70%)它会窒息。我尝试使用Beautiful soup 3.0.8和3.2.0(3.1.0向上有一些问题),但结果几乎相同。

我可以从头脑中回想一下Python中可用的几个HTML解析器选项:

  • BeautifulSoup
  • LXML
  • pyquery

我打算测试所有这些,但我想知道你的测试中哪一个最宽容,甚至可以尝试解析坏的HTML。

4 个答案:

答案 0 :(得分:3)

他们都是。我还没有遇到lxml.html无法解析的任何html页面。如果您尝试解析的页面上的lxml barfs总是可以使用一些正则表达式对它们进行预处理,以保持lxml的快乐。

lxml本身相当严格,但lxml.html是一个不同的解析器,可以处理非常破碎的html。对于极其丰富的html,lxml还附带lxml.html.soupparser,它与BeautifulSoup库接口。

这里描述了使用lxml.html解析损坏的html的一些方法:http://lxml.de/elementsoup.html

答案 1 :(得分:2)

对于不能用于其他任何内容的页面(包含嵌套<form>元素的页面),我会想到MinimalSoupICantBelieveItsBeautifulSoup。每个人都可以处理某些类型的错误,而另一个错误通常你不需要同时尝试这两种错误。

答案 2 :(得分:2)

我最终使用带有html5lib的BeautifulSoup 4.0进行解析,并且更加宽容,对我的代码进行了一些修改,它现在工作得非常好,感谢大家的建议。

答案 3 :(得分:1)

如果beautifulsoup无法解决您的HTML问题,那么下一个最佳解决方案将是正则表达式。 lxml,elementtree,minidom在解析时非常严格,实际上它们做得很好。

其他提示:

  1. 我通过命令提示符将html提供给lynx浏览器,并取出页面/内容的文本版本并使用正则表达式进行解析。

  2. 将html转换为text或html to markdown剥离所有html标记,您将保留文本。这很容易解析。