В настоящее время я пытаюсь итеративно анализировать очень большой HTML-документ (я знаю ... хм), чтобы уменьшить объем используемой памяти.У меня проблема в том, что я получаю ошибки синтаксиса 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'