我想解析一個使用lxml的16Mb html文件。我的實際任務是獲取所有文檔標記和每個doc標記,如果docno
標記的值與我的文檔列表匹配,我將提取doc標記的內容。爲什麼lxml html解析器不解析完整文件?
self.doc_file_list
是一個包含我需要解析的16Mb文件路徑的列表。 文件是文件的絕對路徑。
這是我使用目前
for file in file(self.doc_file_list,'r'):
tree = etree.parse(file.strip(), parser)
doc = tree.findall('.//doc')
for elem in doc:
docno = elem.find('.//docno').text
if docno in self.doc_set:
print >> out, etree.tostring(elem)
的代碼我使用etree.tostring(樹)檢查樹的內容和它不解析整個文件,只解析的實際文件的一些KB。
注:我沒有收到任何錯誤消息,但樹的解析內容不完整,因此我無法獲取整個列表。
許多與編輯確實清除。那麼,我想這將有助於查看問題所示的實際示例文件。或者,也可以自己嘗試找到停止解析的位置,並查看是否有錯誤。查看問題在停止之前/之後移除時是否仍然存在。最終你應該能夠把它縮小到一個特定的問題結構。 – spectras
...如果你發現文件大小實際上是一個問題(可能是如果你在一個小系統上,使用libxml加載一個16MB文件通常會吃〜100MB),也許可以使用XmlTextReader API。 – spectras