Python中最宽容的HTML解析器是什么?
我有一些随机的HTML代码,我用BeautifulSoup来解析它,但大多数情况下(超过70%)它都处理不了。我试过使用BeautifulSoup的3.0.8和3.2.0版本(3.1.0及以上版本有一些问题),但结果几乎是一样的。
我能想到的Python中有几个HTML解析器选项:
- BeautifulSoup
- lxml
- pyquery
我打算测试这些解析器,但我想知道在你们的测试中,哪个解析器最能容错,甚至能尝试解析一些糟糕的HTML。
4 个回答
2
有些网页很难用其他工具处理,比如那些里面有嵌套的 <form>
元素的网页。在这种情况下,我发现使用 MinimalSoup 和 ICantBelieveItsBeautifulSoup 这两个工具效果不错。它们各自能处理一些对方处理不了的错误,所以有时候你需要同时尝试这两个工具。
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来解析网页,这样的组合对代码的要求宽松了很多。经过一些代码的调整,现在运行得相当不错,感谢大家的建议。