哪个lxml和libxml2更适合在Python中解析格式错误的html?

时间:2012-02-17 07:22:36

标签: python html-parsing lxml libxml2

对于格式错误的HTML,哪一个更好,更有用? 我找不到如何使用libxml2。

感谢。

4 个答案:

答案 0 :(得分:13)

libxml2 page中,您可以看到此注释:

  

请注意,一些Python纯粹主义者不喜欢默认的Python绑定集,而不是抱怨我建议他们看看lxml更多pythonic绑定libxml2和libxslt并检查邮件列表。

并在lxml页面中显示另一个:

  

lxml XML工具包是C库libxml2和libxslt的Pythonic绑定。它的独特之处在于它将这些库的速度和XML特性完整性与原生Python API的简单性相结合,大多数兼容但优于众所周知的ElementTree API。

基本上,使用lxml可以获得完全相同的功能,  但是使用与标准库中的ElementTree库兼容的pythonic API(这意味着标准库文档将有助于学习如何使用lxml)。这就是为什么lxml优于libxml2(即使底层实现是相同的)。

编辑:话虽如此,正如其他答案所解释的那样,要解析格式错误的HTML,您最好的选择是使用BeautifulSoup。需要注意的一件有趣的事情是,如果您安装了lxmlBeautifulSoup将按照documentation中针对新版本的说明使用它:

  

如果您没有指定任何内容,您将获得已安装的最佳HTML解析器。 Beautiful Soup将lxml的解析器列为最佳,然后是html5lib,然后是Python的内置解析器。

无论如何,即使BeautifulSoup使用了lxml,您也可以直接解析无法使用html解析的损坏的xml。例如:

>>> lxml.etree.fromstring('<html>')
...
XMLSyntaxError: Premature end of data in tag html line 1, line 1, column 7

然而:

>>> bs4.BeautifulSoup('<html>', 'lxml')
<html></html>

最后,请注意lxml还提供旧版BeautifulSoup的界面,如下所示:

>>> lxml.html.soupparser.fromstring('<html>')
<Element html at 0x13bd230>

所以在一天结束时,你可能会使用lxmlBeautifulSoup。您唯一需要选择的是您最喜欢的API。

答案 1 :(得分:2)

尝试使用beutifulsoup。它旨在解析结构不良的数据。

http://pypi.python.org/pypi/BeautifulSoup

http://lxml.de/elementsoup.html

答案 2 :(得分:1)

BeautifulSoup可以解析html。你可以查看它的例子,发现它与其他的比较好。

答案 3 :(得分:0)

lxml是一般推荐的。具体来说,lxml.html(如果我没记错的话)。

我相信它使用libxml2引擎盖,但如果html特别令人讨厌的话,可以回到beautifulsoup,但是不要相信我的话,请查看网站! (http://http://lxml.de/