我使用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
答案 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 parser和Parsing XML。
答案 1 :(得分:-1)
Beautiful Soup文档提到它无法正确处理xml文件。有一个名为BeautifulStoneSoup的模块可以处理xml文件。这是一个基本模块,并没有什么花哨的。但是,如果您的文件是一个简单的xml,那么它可以很好地完成这项工作。 以下是其文档的link。