2012-02-17 33 views

回答

13

libxml2 page你可以看到這樣一個字條:

注意一些Python的純粹的喜歡Python綁定的默認設置,而不是抱怨,我建議他們在LXML爲更Python綁定看看libxml2和libxslt並檢查郵件列表。

並在lxml頁這個其他之一:

的LXML XML工具包是一個用於Python化C庫libxml2和結合的libxslt。它的獨特之處在於它將這些庫的速度和XML功能完整性與本地Python API的簡單性結合在一起,它們大多兼容但優於衆所周知的ElementTree API。

所以基本上,與lxml你得到完全相同的功能, 但與標準庫的ElementTree庫(兼容AA Python的API,因此這意味着標準庫文件將是有益的學習如何使用lxml )。這就是爲什麼lxml優於libxml2(即使底層實現是同一個)。

編輯:話雖如此,正如其他答案解釋,解析格式不正確的html,您最好的選擇是使用BeautifulSoup。需要注意的一個有趣的事情是,如果你已經安裝了lxmlBeautifulSoup將使用它作爲新版本的documentation解釋說:

如果不指定任何東西,你會得到最好的HTML解析器已安裝。 Beautiful Soup將lxml的解析器評爲最好,然後是html5lib,然後是Python的內置解析器。

無論如何,即使BeautifulSoup使用lxml引擎蓋下,你就可以解析破html,你不能用xml直接解析。例如:

>>> 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> 

因此,在的結束無論如何,你可能會使用lxmlBeautifulSoup。你唯一需要選擇的是你最喜歡的API。

0

lxml是一般推薦的。具體來說,lxml.html(如果我沒記錯的話)。

我相信它利用libxml2引擎蓋下的內容,但如果html特別討厭,可以回落到beautifulsoup,但不要拿我的話來看看網站! (http://http://lxml.de/

1

BeautifulSoup是很好的解析HTML。你可以查看它的例子,並發現它與其他人比較好。