blo*_*men 7 python lxml html-parsing libxml2
对于格式错误的HTML,哪一个更好,更有用?
我找不到如何使用libxml2.
谢谢.
jco*_*ado 13
在libxml2页面中,您可以看到此注释:
请注意,一些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将按照新版本的文档中的说明使用它:
如果您没有指定任何内容,您将获得已安装的最佳HTML解析器.Beautiful Soup将lxml的解析器列为最佳,然后是html5lib,然后是Python的内置解析器.
无论如何,即使在引擎盖下BeautifulSoup使用,你也可以解析你无法直接lxml解析的破碎.例如:htmlxml
>>> lxml.etree.fromstring('<html>')
...
XMLSyntaxError: Premature end of data in tag html line 1, line 1, column 7
Run Code Online (Sandbox Code Playgroud)
然而:
>>> bs4.BeautifulSoup('<html>', 'lxml')
<html></html>
Run Code Online (Sandbox Code Playgroud)
最后,请注意,lxml还提供了旧版本的界面,BeautifulSoup如下所示:
>>> lxml.html.soupparser.fromstring('<html>')
<Element html at 0x13bd230>
Run Code Online (Sandbox Code Playgroud)
因此,在一天结束时,你可能会使用lxml,BeautifulSoup无论如何.您唯一需要选择的是您最喜欢的API是什么.