需要使用Python中的BeautifulSoup将XML文件作为流读取

时间:2014-02-12 21:44:15

标签: python xml

我陷入两难境地。

我需要从各种来源读取非常大的XML文件,因此这些文件通常是无效的XML或格式错误的XML。我仍然必须能够读取文件并从中提取一些信息。我确实需要获取标记信息,因此我需要XML解析器。

是否可以使用Beautiful Soup将数据作为流而不是整个文件读入内存?

我尝试使用ElementTree,但我不能,因为它会阻止任何格式错误的XML。

如果Python不是用于此项目的最佳语言,请添加您的建议。

1 个答案:

答案 0 :(得分:2)

Beautiful Soup没有我知道的流API。但是,你有其他选择。

解析大型XML流的经典方法是使用面向事件的解析器,即SAX。在python中,xml.sax.xmlreader。它不会因格式错误的XML而窒息。您可以避免文件的错误部分并从其余部分提取信息。

然而,SAX是低水平的,边缘有点粗糙。在python的背景下,它感觉很糟糕。

另一方面,xml.etree.cElementTree实现具有更好的界面,非常快,并且可以通过iterparse()方法处理流式传输。

如果您能找到管理错误的方法,

ElementTree会更胜一筹。