“BeautifulSoup”和“lxml”有啥关系?

Posted

技术标签:

【中文标题】“BeautifulSoup”和“lxml”有啥关系?【英文标题】:What's the relationship between 'BeautifulSoup' and 'lxml'?“BeautifulSoup”和“lxml”有什么关系? 【发布时间】:2015-11-18 20:04:49 【问题描述】:

lxml 的doc 中,它说:

lxml 可以通过 lxml.html.soupparser 模块连接到 BeautifulSoup 的解析功能。它提供了三个主要函数:fromstring() 和 parse() 使用 BeautifulSoup 将字符串或文件解析为 lxml.html 文档,以及 convert_tree() 将现有 BeautifulSoup 树转换为***元素列表。

同时BS'也可以使用lxml作为解析器。[ref]

Beautiful Soup 支持 Python 标准库中包含的 HTML 解析器,但它也支持许多第三方 Python 解析器。一个是 lxml 解析器。

BS建议使用lxml 作为速度解析器。

那么如果lxml 使用BS 进行解析,而BS 的解析器反之为lxml 呢?

我一直在为理解他们的关系而摸不着头脑。帮助。

【问题讨论】:

Parsing HTML in python - lxml or BeautifulSoup? Which of these is better for what kinds of purposes?的可能重复 我赞成你的问题,因为我认为这是一个很好的问题。然后我注意到了排在首位的相关问题并点击了链接。我认为***.com/a/19549530/1640661 的答案非常好,有助于阐明这两个库的功能之间的关系。 【参考方案1】:

BS 解析器和lxml.html 解析器应该没有什么混淆。 BS 有一个 HTML 解析器,lxml 有它自己的 HTML 解析器。

您引用的BS 文档只是说您可以使用lxml 解析器或其他可能的第三方解析器将HTML 解析为BS 汤对象,而不是使用默认的BS 解析器:

BeautifulSoup(markup, "lxml")

同样,lxml 文档说您可以使用 BS 解析器将 HTML 解析为 lxml 树对象,而不是使用默认的 lxml.html 解析器:

root = lxml.html.soupparser.fromstring(tag_soup)

【讨论】:

以上是关于“BeautifulSoup”和“lxml”有啥关系?的主要内容,如果未能解决你的问题,请参考以下文章

BeautifulSoup:“lxml”、“html.parser”和“html5lib”解析器有啥区别?

python模块--BeautifulSoup4 和 lxml

BeautifulSoup 和 lxml.html - 更喜欢啥? [复制]

Jupyter 笔记本中的 BeautifulSoup 和 lxml

lxml / BeautifulSoup 解析器警告

BeautifulSoup - lxml 和 html5lib 解析器抓取差异