我正在尝试使用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
解析器进行读取很慢并且占用了我所有的记忆。有办法解决这个问题吗?
感谢任何帮助。
答案 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>]>
<us-patent-grant lang="EN">
1
</us-patent-grant>
<us-patent-grant lang="EN">
2
</us-patent-grant>
</p></body></html>
>>>