python - 使用 BeautifulSoup 解析具有多个根的 xml

标签 python xml beautifulsoup

我正在尝试使用 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>]&gt;
<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/

相关文章:

python - 谷歌云函数: Python and CORS

python - 在 S3ToRedshiftOperator 中拉取 xcom 变量时未定义 ti

python - BeautifulSoup 错误地检查 NavigableString 元素的子成员身份?

python - 使用 beautifulsoup 从 &lt;script&gt; 标签中获取数据

python - 在 Pandas 数据框列中重新编码除一个值外的所有值

regex - 这个 XSD 正则表达式有意义和/或 POSIX 兼容吗?

java - 在android中从名称而不是id获取资源

xml - wix XmlConfig : is it possible to insert a new node in a particular position within a parent node

python - 使用 BeautifulSoup 循环并检索特定 URL

python - 按ponyorm中的子字符串分组