Python和BeautifulSoup随机播放我的标签?

时间:2013-03-16 21:44:31

标签: python xml beautifulsoup

这让我困惑了一段时间,我无法弄清楚这里发生了什么。这是原始的XML文件:

<?xml version="1.0" encoding="UTF-8" ?>
<book>
  <meta>
    <title>Some Title</title>
    <creator>Another Author</creator>
    <language>en-US</language>
    ...
  </meta>
  <chapter>
    ...
  </chapter>
</book>

然后我读了这个文件:

with open(filename) as f :
    soup = BeautifulSoup(f);
    print(soup.root)

奇怪的是,抛出以下内容:

<html><body><book>
<meta/>
<title>Some Title</title>
<creator>Some Author</creator>
<language>en-US</language>
...

为什么哦,为什么汤中的<meta>标签是空的,当它不在原始XML文件中时? (我可以发誓两周前这个工作有效,我也可以发誓我没有触及脚本。我确实对XML文件进行了一些细微的改动,但我没有看到相关性。)

1 个答案:

答案 0 :(得分:0)

您正在HTML解析器中打开XML文件。 BeautifulSoup尝试修复它期望的HTML结构。

相反,请使用XML解析器,或使用BeautifulSoup in XML mode

soup = BeautifulSoup(f, 'xml')

为此,必须安装lxml

lxml本身就是一个优秀的XML库。您还可以使用Python附带的ElementTree库; lxml基于相同的API但具有更多功能。