【发布时间】:2017-08-29 20:32:23
【问题描述】:
我正在尝试使用 lxml 解析一个 16Mb 的 html 文件。我的实际任务是获取所有 doc 标签,如果 docno 标签的值与我的 doc 列表匹配,则为每个 doc 标签提取 doc 标签的内容。
self.doc_file_list 是一个列表,其中包含我需要解析的 16Mb 文件的路径。
file 是文件的绝对路径。
这是我目前使用的代码
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(tree) 检查了树的内容,它不解析完整的文件,只解析实际文件的一些 kb。
注意:我没有收到任何错误消息,但树的解析内容不完整,因此我无法获取整个列表。
【问题讨论】:
-
编辑确实很清楚。好吧,我想这将有助于查看问题显示的实际示例文件。或者,或者,自己尝试找到它停止解析的地方,看看那里是否有问题。查看在停止之前/之后删除内容时问题是否仍然存在。最终,您应该能够将其范围缩小到特定的有问题的结构。
-
...如果你发现文件大小确实是个问题(如果你在一个小系统上,用 libxml 加载一个 16MB 的文件通常会吃掉大约 100MB),也许使用 XmlTextReader API而是。
标签: html parsing lxml elementtree