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