对于格式错误的HTML,哪一个更好,更有用? 我找不到如何使用libxml2。
感谢。
答案 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
。需要注意的一件有趣的事情是,如果您安装了lxml
,BeautifulSoup
将按照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>
所以在一天结束时,你可能会使用lxml
和BeautifulSoup
。您唯一需要选择的是您最喜欢的API。
答案 1 :(得分:2)
尝试使用beutifulsoup。它旨在解析结构不良的数据。
答案 2 :(得分:1)
BeautifulSoup可以解析html。你可以查看它的例子,发现它与其他的比较好。
答案 3 :(得分:0)
lxml是一般推荐的。具体来说,lxml.html(如果我没记错的话)。
我相信它使用libxml2引擎盖,但如果html特别令人讨厌的话,可以回到beautifulsoup,但是不要相信我的话,请查看网站! (http://http://lxml.de/)