【发布时间】:2015-01-19 03:40:54
【问题描述】:
我正在尝试解析使用 BS4 从 Google 下载的大型 xml 文件。但是,该文件由多个根构成,因此xml parser 只能在第一个块中解析。
我使用以下命令加载文件
xml = BeautifulSoup("test.xml", "xml")
test.xml 文件如下所示,它有很多根:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE us-patent-grant SYSTEM "us-patent-grant-v42-2006-08-23.dtd" [ ]>
<us-patent-grant lang="EN" .....>
A LOT of information
</us-patent-grant>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE us-patent-grant SYSTEM "us-patent-grant-v42-2006-08-24.dtd" [ ]>
<us-patent-grant lang="EN" .....>
A LOT of information
</us-patent-grant>
.......
html 解析器可以读取完整文件。但是,一个常规的此类文件包含超过 10k 个根。使用html 解析器读取速度很慢,并且会占用我所有的内存。有没有办法解决这个问题?
感谢任何帮助。
【问题讨论】:
-
那之后你的代码是什么?即,您如何尝试检索块?
-
“文件的第一个块”是什么意思?另外,您能否提供一个示例 XML 文件(通过链接或其他方式)。
-
@khampson,我只是打印我的 xml,它只有第一个块,而不是完整的文件。我怀疑标签的第二行可能是问题,但我对xml格式知之甚少。
-
哦,好的。所以实际上你有多个 xml 文件连接成一个。 Google API 真的是这样提供的吗?这似乎不寻常......正如@GuyGavriely 所建议的那样,lxml 将是一个不错的选择,因为它是基于 C 的解析器的 Python 包装器,应该更快。
-
@ZhenSun 因为你特别提到了我,所以我会注意到 Guy Gavriely 在下面解释的“多根”问题是我提出问题的动机。由于这个问题,我也无法(在我短暂的尝试中)使
lxml解析文档。相反,重新格式化文档可能更容易。否则,您可能会考虑尝试these XML parsers 之一。
标签: python xml beautifulsoup