2016-11-06 46 views
0

我有看起來像是HTML文檔的一部分的數據。然而,它有一些錯誤,如如何解析帶有錯誤的HTML?

<td class= foo"bar"> 

所有我試過的解析器(lxml,xml.etree)失敗並出現錯誤。

因爲我實際上並不關心文檔的這個特定部分,我正在尋找更強大的解析器。

某些地方我可以允許忽略特定子樹中的錯誤,也許只是不插入節點或者只會懶惰地解析我所遍歷的樹的部分。

回答

1

您正在使用XML解析器。 XML是一種嚴格的語言,而HTML標準要求解析器能夠容忍錯誤。

使用符合HTML的解析器,如lxml.htmlhtml5lib或包裝庫BeautifulSoup(其中uses either of the previous帶有更清潔的API)。 html5lib速度較慢,但​​與現代瀏覽器如何處理錯誤密切相關。

+0

BeautifulSoup也很方便導航結果! – Sarien

1

使用LXML:

創建與recover集的HTML解析器爲True:

parser = etree.HTMLParser(recover=True) 
tree = etree.parse(StringIO(broken_html), parser) 

參見教程Parsing XML and HTML with lxml