2016-11-06 43 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