首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BeautifulSoup和lxml.html -首选哪个?

BeautifulSoup和lxml.html -首选哪个?
EN

Stack Overflow用户
提问于 2011-02-11 16:49:40
回答 4查看 42.9K关注 0票数 38

我正在从事一个项目,将涉及解析HTML。

在四处搜索之后,我发现了两个可能的选项: BeautifulSoup和lxml.html

有什么理由更喜欢其中之一吗?我以前使用过lxml for XML,我觉得我会更习惯使用它,但是BeautifulSoup似乎很常见。

我知道我应该使用对我有效的那个,但我在寻找两者的个人经验。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-11 16:51:50

imo,简单的答案是,如果您相信您的源代码是格式良好的,那么就使用lxml解决方案。否则,就会一直使用BeautifulSoup。

编辑:

这个答案现在已经三年了;值得注意的是,正如Jonathan Vanasco在评论中所做的那样,BeautifulSoup4现在支持使用lxml作为内部解析器,所以如果您愿意,您可以使用BeautifulSoup的高级特性和接口,而不会对性能造成大部分影响(尽管我自己仍然直接使用lxml --也许这只是习惯的力量:)。

票数 44
EN

Stack Overflow用户

发布于 2013-10-24 01:48:33

总之,lxml被定位为一个生产质量极快的html和xml解析器,顺便说一句,它还包含一个soupparser模块,用于依赖BeautifulSoup的功能。BeautifulSoup是一个人的项目,旨在节省您从格式不佳的html或xml中快速提取数据的时间。

lxml documentation说这两种解析器都有优点和缺点。出于这个原因,lxml提供了一个soupparser,以便您可以来回切换。引用,

BeautifulSoup使用不同的解析方法。它不是一个真正的HTML解析器,而是使用正则表达式来分析标签汤。因此,在某些情况下,它是更宽容的,而在其他情况下,它就不那么好了。lxml/libxml2更好地解析和修复损坏的超文本标记语言并不少见,但是BeautifulSoup对编码检测提供了更好的支持。它在很大程度上取决于输入哪个解析器工作得更好。

最后他们会说,

使用这个解析器的缺点是,它比

解析器要慢得多。因此,如果性能很重要,您可能需要考虑仅在某些情况下使用作为后备方案。

如果我理解正确的话,这意味着soup解析器更健壮-它可以使用正则表达式处理格式错误的标记的“汤”-而lxml更简单,只像您所期望的那样解析事物并构建树。我假设它也适用于BeautifulSoup本身,而不仅仅是lxmlsoupparser

它们还展示了如何在使用lxml快速解析的同时,从BeautifulSoup的编码检测中获益

代码语言:javascript
复制
>>> from BeautifulSoup import UnicodeDammit

>>> def decode_html(html_string):
...     converted = UnicodeDammit(html_string, isHTML=True)
...     if not converted.unicode:
...         raise UnicodeDecodeError(
...             "Failed to detect encoding, tried [%s]",
...             ', '.join(converted.triedEncodings))
...     # print converted.originalEncoding
...     return converted.unicode

>>> root = lxml.html.fromstring(decode_html(tag_soup))

(同一来源:http://lxml.de/elementsoup.html)。

BeautifulSoup创建者的话说,

就是这样!玩得开心!我写了“美丽的汤”来节省大家的时间。一旦你习惯了它,你应该能够在短短几分钟内从设计糟糕的网站中提取数据。发送电子邮件给我,如果你有任何意见,遇到问题,或想让我知道你的项目,使用美丽的汤。

--伦纳德

引用自Beautiful Soup documentation

我希望这一点现在已经清楚了。The soup是一个出色的单人项目,旨在节省您从设计糟糕的网站中提取数据的时间。我们的目标是现在就节省你的时间,完成工作,不一定要从长远来看节省你的时间,当然也不是为了优化你的软件的性能。

另外,在lxml website上,

Python已经从

包索引中下载了200多万次,并且在许多包发行版中也可以直接获得,例如用于Linux或MacOS-X。

还有,来自Why lxml?

C库libxml2和libxslt有很大的好处:...符合标准..。全功能..。快地。快地!快!..是一种用于libxml2和libxslt的新Python绑定... lxml

票数 20
EN

Stack Overflow用户

发布于 2011-02-11 18:34:31

两者都用?用于DOM操作的lxml,用于解析的BeautifulSoup:

http://lxml.de/elementsoup.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4967103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档