【问题标题】:Need to read XML files as a stream using BeautifulSoup in Python需要在 Python 中使用 BeautifulSoup 将 XML 文件作为流读取
【发布时间】:2014-02-12 21:44:15
【问题描述】:

我有一个难题。

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

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

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

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

【问题讨论】:

标签: python xml


【解决方案1】:

据我所知,Beautiful Soup 没有流式传输 API。但是,您还有其他选择。

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

然而,SAX 是低级的,并且边缘有点粗糙。在python的上下文中,感觉很糟糕。

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

ElementTree 更好,如果你能找到管理错误的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 2014-04-12
    • 2017-08-15
    相关资源
    最近更新 更多