私は現在、使用されるメモリの量を減らすために、非常に大きな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'