我找不到如何使用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
。有趣的一点是,如果您已经安装了 lxml
,BeautifulSoup
会像新版本的 文档 中所解释的那样使用它:
如果您没有指定任何内容,将获取已安装的最佳 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>
所以说,归根结底,你最终可能会使用 lxml
和 BeautifulSoup
。你需要选择的唯一事情就是你最喜欢的API是什么。
通常建议使用lxml。具体来说,是lxml.html(如果我没记错的话)。
我相信它在底层使用libxml2,但如果HTML特别复杂,则会退回到beautifulsoup,但不要听我的,去看看网站!(http://lxml.de/)