我有看起来像是HTML文档的一部分的数据。然而,它有一些错误,如如何解析带有错误的HTML?
<td class= foo"bar">
所有我试过的解析器(lxml,xml.etree)失败并出现错误。
因为我实际上并不关心文档的这个特定部分,我正在寻找更强大的解析器。
某些地方我可以允许忽略特定子树中的错误,也许只是不插入节点或者只会懒惰地解析我所遍历的树的部分。
我有看起来像是HTML文档的一部分的数据。然而,它有一些错误,如如何解析带有错误的HTML?
<td class= foo"bar">
所有我试过的解析器(lxml,xml.etree)失败并出现错误。
因为我实际上并不关心文档的这个特定部分,我正在寻找更强大的解析器。
某些地方我可以允许忽略特定子树中的错误,也许只是不插入节点或者只会懒惰地解析我所遍历的树的部分。
您正在使用XML解析器。 XML是一种严格的语言,而HTML标准要求解析器能够容忍错误。
使用符合HTML的解析器,如lxml.html
或html5lib
或包装库BeautifulSoup(其中uses either of the previous带有更清洁的API)。 html5lib
速度较慢,但与现代浏览器如何处理错误密切相关。
使用LXML:
创建与recover
集的HTML解析器为True:
parser = etree.HTMLParser(recover=True)
tree = etree.parse(StringIO(broken_html), parser)
BeautifulSoup也很方便导航结果! – Sarien