使用Python解析畸形的HTML,lxml和libxml2哪个更好?

9
哪种工具对于格式错误的html更好且更有用?
我找不到如何使用libxml2的方法。
谢谢。
4个回答

16
libxml2 页面 中提到:

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

而在 lxml 页面上则提到:

lxml XML 工具包是用于 C 库 libxml2 和 libxslt 的 Python 绑定。它独特的地方在于,它将这些库的速度和 XML 功能完整性与本地 Python API 的简单性结合在一起,大多数情况下兼容但优于著名的 ElementTree API。

因此,使用 lxml 可以得到完全相同的功能,但具有与标准库中的 ElementTree 库兼容的 Pythonic API(这意味着标准库文档将有用于学习如何使用 lxml)。这就是为什么在使用相同实现的情况下,人们更倾向于选择 lxml 而不是 libxml2

编辑:话虽如此,正如其他答案所解释的那样,要解析格式不规范的 HTML,您最好使用 BeautifulSoup。有趣的一点是,如果您已经安装了 lxmlBeautifulSoup 会像新版本的 文档 中所解释的那样使用它:

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

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

>>> 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是什么。


2

1

BeautifulSoup是解析HTML的好工具。你可以查看它的示例,发现它比其他工具更好用。


0

通常建议使用lxml。具体来说,是lxml.html(如果我没记错的话)。

我相信它在底层使用libxml2,但如果HTML特别复杂,则会退回到beautifulsoup,但不要听我的,去看看网站!(http://lxml.de/)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接