美丽的汤find_all()返回奇数标签而不是结果

时间:2014-10-05 12:50:17

标签: python xml beautifulsoup

我使用Beautiful Soup从XML文件中获取一些信息,如下所示:

<name>Ted</name>
<link>example.com/rss</link>
<link>example2.com/rss</link>

这是我目前正在尝试阅读的整个XML文件,用于测试目的。

当我尝试使用find_all('link')时,它会返回一个由以下内容组成的列表:

[ <link/>, <link/> ]

我似乎无法在任何文档中找到任何类似的内容,任何人都可以告诉我我做错了什么?

编辑:包括解析代码:

for file in glob.glob("*.xml"):
            if file.endswith(".xml"):
                    f = open(file, 'r');

                    #Reads in all information about the bot from the file
                    botFile = f.read()
                    soup = BeautifulSoup(botFile)

                    name = soup.find('name').get_text()

                    links = soup.find_all('link')
                    for link in links:
                            print link

2 个答案:

答案 0 :(得分:2)

要使用BeautifulSoup解析XML,您需要使用 XML解析器;确保你有lxml installed并告诉BeautifulSoup使用XML:

soup = BeautifulSoup(document, 'xml')

否则元素被解析为HTML <link> tags,根据定义它们是空的。

演示:

>>> from bs4 import BeautifulSoup
>>> sample = '''\
... <root>
... <name>Ted</name>
... <link>example.com/rss</link>
... <link>example2.com/rss</link>
... </root>
... '''
>>> soup = BeautifulSoup(sample)
>>> soup.find_all('link')
[<link/>, <link/>]
>>> soup = BeautifulSoup(sample, 'xml')
>>> soup.find_all('link')
[<link>example.com/rss</link>, <link>example2.com/rss</link>]

请注意,如果没有第二个参数'xml',则结果为空标记对象,但设置'xml'时标记内容就在那里。

请参阅文档中的Installing a parserParsing XML

答案 1 :(得分:-1)

Beautiful Soup文档提到它无法正确处理xml文件。有一个名为BeautifulStoneSoup的模块可以处理xml文件。这是一个基本模块,并没有什么花哨的。但是,如果您的文件是一个简单的xml,那么它可以很好地完成这项工作。 以下是其文档的link