使用BeautifulSoup解析具有许多根的xml

时间:2014-11-21 03:53:44

标签: python xml beautifulsoup

我正在尝试使用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解析器进行读取很慢并且占用了我所有的记忆。有办法解决这个问题吗?

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

有效的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>]&gt;
<us-patent-grant lang="EN">
1
</us-patent-grant>
<us-patent-grant lang="EN">
2
</us-patent-grant>
</p></body></html>
>>> 
相关问题