我陷入两难境地。
我需要从各种来源读取非常大的XML文件,因此这些文件通常是无效的XML或格式错误的XML。我仍然必须能够读取文件并从中提取一些信息。我确实需要获取标记信息,因此我需要XML解析器。
是否可以使用Beautiful Soup将数据作为流而不是整个文件读入内存?
我尝试使用ElementTree,但我不能,因为它会阻止任何格式错误的XML。
如果Python不是用于此项目的最佳语言,请添加您的建议。
答案 0 :(得分:2)
Beautiful Soup没有我知道的流API。但是,你有其他选择。
解析大型XML流的经典方法是使用面向事件的解析器,即SAX。在python中,xml.sax.xmlreader
。它不会因格式错误的XML而窒息。您可以避免文件的错误部分并从其余部分提取信息。
另一方面,xml.etree.cElementTree
实现具有更好的界面,非常快,并且可以通过iterparse()
方法处理流式传输。
ElementTree
会更胜一筹。