解析源代码(Python)方法:美丽的汤,lxml,html5lib的区别?

Parsing Source Code (Python) Approach: Beautiful Soup, lxml, html5lib difference?

我有一个大的HTML源代码我想解析(~200,000)行,我相当确定整个格式都很差。我一直在研究一些解析器,似乎Beautiful Soup,lxml,html5lib是最受欢迎的。从阅读这个网站,似乎lxml是最常用和最快的,而美丽的汤速度较慢,但??会导致更多的错误和变化。

我对Beautiful Soup文档,http://www.crummy.com/software/BeautifulSoup/bs4/doc/,以及BeautifulSoup(标记,"lxml")或BeautifulSoup(标记,html5lib)等命令感到困惑。在这种情况下它是使用Beautiful Soup还是html5lib / lxml?速度在这里不是一个问题,但准确性是。最终目标是使用urllib2解析获取源代码,并从文件中检索所有文本数据,就像我只是复制/粘贴网页一样。

附:无论如何解析文件而不返回网页视图中不存在的任何空格?


我的理解(将BeautifulSoup用于少数事情)是它是lxml或html5lib等解析器的包装器。使用指定的解析器(我相信默认是HTMLParser,python的默认解析器),BeautifulSoup创建一个标记元素树,这样可以很容易地导航和搜索HTML以查找标记内的有用数据。如果您确实需要网页中的文字而不是特定HTML标记中的特定数据,则可能只需要与此类似的代码段:

1
2
3
4
from bs4 import BeautifulSoup
import urllib2
soup = BeautifulSoup(urllib2.urlopen("http://www.google.com")
soup.get_text()

get_text对于复杂的网页来说并不是那么好(偶尔会有随机的javascript或css),但是如果你对如何使用BeautifulSoup感兴趣,那么获取你想要的文本并不难。

为了您的目的,您似乎不必担心让其他解析器与BeautifulSoup(html5lib或lxml)一起使用。 BeautifulSoup可以自己处理一些邋iness,如果不能,它会给出"格式错误的HTML"或类似的东西的明显错误,这将是安装html5lib或lxml的指示。