Python BeautifulSoup 给出不同的结果

Python BeautifulSoup giving different results

我正在尝试使用 BeautifulSoup 解析 xml 文件。考虑一个 sampleinpt xml 文件如下:

<DOC>
<DOCNO>1</DOCNO>
....
</DOC>
<DOC>
<DOCNO>2</DOCNO>
....
</DOC>
...

此文件包含 130 个 <DOC> 标签。但是,当我尝试使用 BeautifulSoup 的 findAll 函数解析它时,它会检索随机数量的标签(通常在 15 - 25 之间),但永远不会是 130。我使用的代码如下:

from bs4 import BeautifulSoup
z = open("filename").read()
soup = BeautifulSoup(z, "lxml")
print len(soup.findAll('doc'))
#more code involving manipulation of results

谁能告诉我我做错了什么?提前致谢!

您告诉 BeautifulSoup 使用 lxml 提供的 HTML 解析器。如果你有一个 XML 文档,你应该坚持使用 XML 解析器选项:

soup = BeautifulSoup(z, 'xml')

否则解析器将尝试'repair' XML 以适应HTML 规则。 XML BeautifulSoup 中的解析也由 lxml 库处理。

请注意 XML 区分大小写 因此您现在需要搜索 DOC 元素。

对于XML文档,可能lxml提供的ElementTreeAPI效率更高;例如,它支持 XPath 查询,而 BeautifulSoup 不支持。

但是,从您的样本来看,似乎没有 顶级元素;就好像您的文档由一整套 XML 文档组成。这会使您的输入 无效 ,并且解析器可能只是坚持只将第一个元素解析为顶级文档。