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 文档组成。这会使您的输入 无效 ,并且解析器可能只是坚持只将第一个元素解析为顶级文档。
我正在尝试使用 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 文档组成。这会使您的输入 无效 ,并且解析器可能只是坚持只将第一个元素解析为顶级文档。