我有一些隨機的HTML,我用BeautifulSoup來解析它,但在大多數情況下(> 70%)它窒息。我嘗試使用美麗的湯3.0.8和3.2.0(3.1.0向上有一些問題),但結果幾乎相同。Python中最寬容的HTML解析器是什麼?
我可以從我的頭頂記得在Python提供了一些HTML解析器選項:
- BeautifulSoup
- LXML
- pyquery
我打算測試所有這些,但我想知道你的測試中哪一個是最寬容的,甚至可以嘗試解析不好的HTML。
我有一些隨機的HTML,我用BeautifulSoup來解析它,但在大多數情況下(> 70%)它窒息。我嘗試使用美麗的湯3.0.8和3.2.0(3.1.0向上有一些問題),但結果幾乎相同。Python中最寬容的HTML解析器是什麼?
我可以從我的頭頂記得在Python提供了一些HTML解析器選項:
我打算測試所有這些,但我想知道你的測試中哪一個是最寬容的,甚至可以嘗試解析不好的HTML。
我最終使用了帶有html5lib的BeautifulSoup 4.0進行解析,並且更加寬容,對代碼進行了一些修改,現在它工作得非常好,謝謝大家的建議。
如果beautifulsoup不能解決你的html問題,下一個最好的解決方案將是正則表達式。 lxml,elementtree,minidom在解析中非常嚴格,實際上他們做得很對。
其他提示:
我養活的HTML瀏覽器山貓通過命令提示符,然後取出頁/內容的文字版本,並使用正則表達式解析。
將html轉換爲文本或html進行降價將剝離所有html標籤,並保留文本。這很容易解析。
的包裝,但我需要它來修改html,所以它不會是一個很好的解決方案在我的情況。 –
他們都是。我還沒有遇到lxml.html無法解析的任何HTML頁面。如果您試圖解析的頁面上的lxml barfs始終可以使用一些正則表達式對它們進行預處理,以保持lxml的快樂。
lxml本身相當嚴格,但lxml.html
是一個不同的解析器,可以處理非常糟糕的html。對於非常寬的html,lxml還附帶lxml.html.soupparser
,它與BeautifulSoup庫連接。
一些方法來解析使用lxml.html損壞的HTML描述如下:http://lxml.de/elementsoup.html
與不與任何其他(那些包含嵌套<form>
元素浮現在腦海中)我已經成功與工作頁面MinimalSoup和ICantBelieveItsBeautifulSoup。每個人都可以處理某些類型的錯誤,而其他人不能經常嘗試這兩種錯誤。
因爲這不是真正的答案,所以我沒有發佈它,但是你所描述的正是美麗湯開發的原因:解析不好的HTML。如果你有一份非常糟糕的文檔,即使美麗的湯不能解析它,你可能會失敗。我聽說過的其他解析器(包括lxml)要嚴格得多。 –
另請參閱http://stackoverflow.com/questions/1922032/parsing-html-in-python-lxml-or-beautifulsoup-which-of-these-is-better-for-what –
爲了保持這一目標,發佈每個解析器barfs的最小片段將是有用的。 – smci