繁体   English   中英

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')

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

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

对于XML文档, 可能lxml提供的ElementTree API更具生产力。 例如,它支持XPath查询,而BeautifulSoup不支持。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM