如何解析类似HTML的错误?

时间:2016-11-06 13:33:38

标签: python html parsing

我的数据看起来像是HTML文档的一部分。然而,它有一些错误,如

<td class= foo"bar">

我尝试过的所有解析器(lxml,xml.etree)都因为错误而失败。

由于我实际上并不关心文档的这个特定部分,因此我正在寻找更强大的解析器。

我可以允许忽略特定子树中的错误的东西,也可能只是不插入节点或只会懒惰地解析我正在遍历的树的部分的东西。

2 个答案:

答案 0 :(得分:1)

您正在使用XML解析器。 XML是一种严格的语言,而HTML标准要求解析器容忍错误。

使用符合条件的HTML解析器,例如lxml.htmlhtml5lib,或包装库BeautifulSoupuses either of the previous使用更清晰的API)。 html5lib速度较慢,但​​会模仿现代浏览器处理错误的方式。

答案 1 :(得分:1)

使用lxml:

创建一个将recover设置为True的HTML解析器:

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

请参阅教程Parsing XML and HTML with lxml