使用Python 2.7解析HTML - HTMLParser、SGMLParser还是Beautiful Soup?

16
我想用Python 2.7进行一些屏幕抓取,并且我不了解HTMLParser、SGMLParser或Beautiful Soup之间的区别。它们都是为解决同样的问题而存在吗,还是出于不同的原因而存在?哪一个是最简单的,哪一个是最强大的,哪一个(如果有的话)是默认选择?另外,请让我知道是否有任何重要的选项被忽略了。
另外,我应该提到我对HTML解析并不是特别有经验,我尤其关心哪个选项可以最快让我开始,在解析一个特定网站的HTML时达到目标。

1
通过几个好的例子来掌握使用lxml的xpath是一个不错的方法。我建议尝试这些链接:http://lxml.de/tutorial.html和http://www.techchorus.net/web-scraping-lxml - user
4个回答

14

我使用并推荐使用 lxmlpyquery 来解析HTML内容。几个月前,我写了一个网络爬虫机器人,尝试了许多流行的替代方案,包括 HTMLParserBeautifulSoup,最终选择了 lxmlpyquery 的语法糖。虽然我还没有尝试过 SGMLParser

根据我的观察,lxml 库功能最为丰富,其底层C核心相对于其他库而言性能更佳。至于 pyquery,我非常喜欢它受jQuery启发的语法,使得DOM的导航更加愉快。

以下是一些你可能会发现有用的资源,如果你决定尝试一下:

好的,以上是我的建议 :) 希望对你有所帮助。


你会如何比较 lxmlHTMLParser 的易用性,而不考虑性能? - Eric Wilson
嗯,我想这取决于你的经验和喜好,但我个人认为lxml的面向文档的方法比HTMLParser的基于流的模型更直观。因此,我发现lxml更容易使用,但我可能不是完全公正的,因为在几个月前对不同库进行了初步比较后,我只使用了lxml。 - tishon

6

BeautifulSoup特别适用于野外发现的脏HTML。它可以解析任何旧的东西,但速度比较慢。

现在非常流行的选择是lxml.html,它很快,并且如果需要,可以使用BeautifulSoup。


1

看一下Scrapy。它是一个专门用于网络爬虫的Python框架。使用XPath很容易提取信息。它还具有一些非常有趣的功能,例如定义抓取数据的模型(以便能够以不同格式导出数据),身份验证和递归跟随链接。


-4

嗯,软件就像汽车一样...不同的品味都能开!

使用BeautifulSoup(4)吧。


5
软件就像汽车一样...了解你驾驶的是轿车、小型货车、跑车还是大型卡车很重要。虽然它们都能开动,但它们有不同的目标,应该相应地进行驾驶。 - Eric Wilson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接