Python BeautifulSoup给出不同的结果

时间:2015-06-06 11:06:45

标签: python xml python-2.7 parsing beautifulsoup

我正在尝试使用xml解析BeautifulSoup文件。考虑一个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

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

1 个答案:

答案 0 :(得分:2)

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

soup = BeautifulSoup(z, 'xml')

否则解析器将尝试“修复”XML以符合HTML规则。 BeautifulSoup中的XML解析也由lxml库处理。

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

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

但是,从您的示例中看来,似乎没有一个顶级元素;就好像您的文档由一系列XML文档组成。这会使您的输入无效,而解析器可能只会将第一个元素解析为顶层文档而不是。