我正在尝试使用 BS4 解析从 Google 下载的大型 xml 文件。但是,该文件是由许多根构建的,因此 xml 解析器
只能解析第一个 block 。
我使用以下命令加载文件
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 文件只有一个根,要么将该单个根添加到文件中,要么告诉解析器将其解析为“html”(这是默认设置),例如:
>>> from bs4 import BeautifulSoup
>>> BeautifulSoup(open("test.xml"), "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">
1
</us-patent-grant>
>>> BeautifulSoup(open("test.xml"))
<!DOCTYPE us-patent-grant SYSTEM "us-patent-grant-v42-2006-08-23.dtd">
<html><body><p>]>
<us-patent-grant lang="EN">
1
</us-patent-grant>
<us-patent-grant lang="EN">
2
</us-patent-grant>
</p></body></html>
>>>
关于python - 使用 BeautifulSoup 解析具有多个根的 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27053813/