我目前正在尝试迭代解析一个非常大的 HTML 文档(我知道.. yuck)以减少使用的内存量。我遇到的问题是我收到了 XML 语法错误,例如:
lxml.etree.XMLSyntaxError: Attribute name redefined, line 134, column 59
这会导致一切停止。
有没有一种方法可以迭代解析 HTML 而不会因语法错误而窒息?
目前我正在从 XML 语法错误异常中提取行号,从文档中删除该行,然后重新启动该过程。似乎是一个非常恶心的解决方案。有没有更好的办法?
编辑:
这就是我目前正在做的事情:
context = etree.iterparse(tfile, events=('start', 'end'), html=True)
in_table = False
header_row = True
while context:
try:
event, el = context.next()
# do something
# remove old elements
while el.getprevious() is not None:
del el.getparent()[0]
except etree.XMLSyntaxError, e:
print e.msg
lineno = int(re.search(r'line (\d+),', e.msg).group(1))
remove_line(tfilename, lineno)
tfile = open(tfilename)
context = etree.iterparse(tfile, events=('start', 'end'), html=True)
except KeyError:
print 'oops keyerror'