我想解析一个使用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