2011-07-29 33 views
4

我有一些隨機的HTML,我用BeautifulSoup來解析它,但在大多數情況下(> 70%)它窒息。我嘗試使用美麗的湯3.0.8和3.2.0(3.1.0向上有一些問題),但結果幾乎相同。Python中最寬容的HTML解析器是什麼?

我可以從我的頭頂記得在Python提供了一些HTML解析器選項:

  • BeautifulSoup
  • LXML
  • pyquery

我打算測試所有這些,但我想知道你的測試中哪一個是最寬容的,甚至可以嘗試解析不好的HTML。

+2

因爲這不是真正的答案,所以我沒有發佈它,但是你所描述的正是美麗湯開發的原因:解析不好的HTML。如果你有一份非常糟糕的文檔,即使美麗的湯不能解析它,你可能會失敗。我聽說過的其他解析器(包括lxml)要嚴格得多。 –

+0

另請參閱http://stackoverflow.com/questions/1922032/parsing-html-in-python-lxml-or-beautifulsoup-which-of-these-is-better-for-what –

+2

爲了保持這一目標,發佈每個解析器barfs的最小片段將是有用的。 – smci

回答

1

我最終使用了帶有html5lib的BeautifulSoup 4.0進行解析,並且更加寬容,對代碼進行了一些修改,現在它工作得非常好,謝謝大家的建議。

1

如果beautifulsoup不能解決你的html問題,下一個最好的解決方案將是正則表達式。 lxml,elementtree,minidom在解析中非常嚴格,實際上他們做得很對。

其他提示:

  1. 我養活的HTML瀏覽器山貓通過命令提示符,然後取出頁/內容的文字版本,並使用正則表達式解析。

  2. 將html轉換爲文本或html進行降價將剝離所有html標籤,並保留文本。這很容易解析。

+0

的包裝,但我需要它來修改html,所以它不會是一個很好的解決方案在我的情況。 –

3

他們都是。我還沒有遇到lxml.html無法解析的任何HTML頁面。如果您試圖解析的頁面上的lxml barfs始終可以使用一些正則表達式對它們進行預處理,以保持lxml的快樂。

lxml本身相當嚴格,但lxml.html是一個不同的解析器,可以處理非常糟糕的html。對於非常寬的html,lxml還附帶lxml.html.soupparser,它與BeautifulSoup庫連接。

一些方法來解析使用lxml.html損壞的HTML描述如下:http://lxml.de/elementsoup.html

2

與不與任何其他(那些包含嵌套<form>元素浮現在腦海中)我已經成功與工作頁面MinimalSoupICantBelieveItsBeautifulSoup。每個人都可以處理某些類型的錯誤,而其他人不能經常嘗試這兩種錯誤。