我正在尝试使用lxml解析一个16Mb的html文件。我的实际任务是获取所有doc标签和每个doc标签,如果docno
标签的值与我的文档列表匹配,我会提取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。
注意:我没有收到任何错误消息但是树的解析内容不完整,所以我无法获得整个列表。
答案 0 :(得分:0)
我终于能够解决这个问题了。我检查了生成的树,但它没有解析整个文档。这是因为该文件严重破裂。您可以在链接上查看此信息:lxml.de/parsing.html(已删除http,因为stackoverflow不允许我添加超过2个链接)。
本次破解的html文档可以使用以下两种方法之一解决:
1。您可以使用lxml提供的ElementSoup,而不是使用html解析器。它使用BeautifulSoup解析器来处理损坏的html文档。链接:http://lxml.de/lxmlhtml.html
注意:这种方法对我来说没有用。
2。另一种方法是直接使用BeautifulSoup并使用它提供的解析器。提供了许多解析器选项,您需要找出最适合您的选项。对我来说,html.parser工作。
链接:https://www.crummy.com/software/BeautifulSoup/bs4/doc/#attributes
感谢大家的帮助。