我正在嘗試迭代地解析一個非常大的HTML文檔(我知道.. yuck)以減少使用的內存量。我遇到的問題是,我得到XML語法錯誤,如:迭代解析HTML(使用lxml?)
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'
我試圖反覆解析文檔,由於其大尺寸。據我所知,lxml.html沒有iterparse函數。 – Acorn
我建議lxml.html,因爲在OP中沒有提及嘗試lxml.html。我認爲對我的答覆進行低估是錯誤的。 –