2012-03-12 68 views
9

我寫了一個python腳本來處理大量下載的網頁HTML(120K頁)。我需要解析它們並從中提取一些信息。我嘗試使用BeautifulSoup,它很簡單直觀,但它似乎運行得非常慢。因爲這是必須在弱機器上運行(在亞馬遜上)的速度,這一點非常重要。 python中是否有一個HTML/XML解析器,其工作速度比BeautifulSoup快得多?或者我必須求助於正則表達式解析..一個快速的Python HTML解析器

+5

[Keep the pony away ...](http://stackoverflow.com/a/1732454/554546) – 2012-03-12 16:28:50

+2

我沒有在Python中解析HTML的經驗,但[這裏](http://blog.ianbicking .org/2008/03/30/python-html-parser-performance /)是您可能會發現有用的一些基準測試結果。 – 2012-03-12 16:30:28

+8

[正則表達式和HTML ==失敗](http://stackoverflow.com/a/1732454/554546) – 2012-03-12 16:30:33

回答

13

LXML是一個快速的XML和HTML解析器:http://lxml.de/parsing.html

+2

的性能比,但是基準測試表明lxml要快得多! – WeaselFox 2012-03-12 17:05:56

+0

要安裝:'pip install lxml' – Flimm 2017-05-26 15:35:05

0

嘗試:ElementTree可能會更快,但我不知道。

xml.etree.ElementTree import ElementTree 
+0

我也會提出這個建議......雖然我沒有任何數據可以支持與BeautifulSoup – inspectorG4dget 2012-03-12 16:44:25

3

SAX風格的解析器可以比基於DOM的更快。你的代碼被賦予了一系列元素,你必須推斷(並可能存儲)他們的關係;但你只需要保持儘可能多的狀態以獲得你想要的數據。相比之下,DOM風格的解析器需要構建可導航的對象模型,這需要耗費時間(和內存),這可能不需要花費。

Python有這樣的HTML解析器;它被稱爲HTMLParser(在Python 3中爲html.parser)。根據識別要提取的數據的難度,然而,要成功解決這種解析問題可能非常困難。如果你要發佈一個示例文件並且告知你想從中提取哪些數據,我可能會採取一些措施。