我的数据看起来像是HTML文档的一部分。然而,它有一些错误,如
<td class= foo"bar">
我尝试过的所有解析器(lxml,xml.etree)都因为错误而失败。
由于我实际上并不关心文档的这个特定部分,因此我正在寻找更强大的解析器。
我可以允许忽略特定子树中的错误的东西,也可能只是不插入节点或只会懒惰地解析我正在遍历的树的部分的东西。
答案 0 :(得分:1)
您正在使用XML解析器。 XML是一种严格的语言,而HTML标准要求解析器容忍错误。
使用符合条件的HTML解析器,例如lxml.html
或html5lib
,或包装库BeautifulSoup(uses either of the previous使用更清晰的API)。 html5lib
速度较慢,但会模仿现代浏览器处理错误的方式。
答案 1 :(得分:1)
使用lxml:
创建一个将recover
设置为True的HTML解析器:
parser = etree.HTMLParser(recover=True)
tree = etree.parse(StringIO(broken_html), parser)