-2

我使用下载一个xml文件

wget -O example.xml http://gdata.youtube.com/feeds/api/videos?q=samsung+mobile&orderby=relevance&start-index=1&max-results=5&v=2

我想从 x_HFR3Hmv44 获取视频 ID,例如“x_HFR3Hmv44”,发布时间为 2010-10-25T20:42:22.000Z

但是,我使用以下代码失败了

import xml.etree.cElementTree as et

sxml = open('example.xml', 'r').read()
tree=et.fromstring(sxml)
for el in tree.findall('published'):
    print el.getchildren()[1].text

但我失败了,输出什么都没有

谁能告诉我哪里错了?谢谢!

是不是因为xml.etree.cElementTree不能处理xml文件?有类似的标签,而文件中未定义 yt

4

2 回答 2

1

您只是对 XML 结构感到困惑。添加prettyprint=true到您的查询字符串以获取缩进的 xml,这将使您更容易阅读。另请参阅YouTube 的元素参考链接以了解预期内容。

这将使您开始:

from urllib import urlopen
import xml.etree.cElementTree as ET

url = 'http://gdata.youtube.com/feeds/api/videos?q=samsung+mobile&orderby=relevance&start-index=1&max-results=5&v=2'

root = ET.parse(urlopen(url))

def qname(prefix, name, map={'atom':'http://www.w3.org/2005/Atom'}):
    """Helper function for namespaced element names"""
    return '{{{}}}{}'.format(map[prefix], name)


for e in root.findall(qname('atom','entry')):
    print e.findtext(qname('atom','id')), e.findtext(qname('atom','published'))
于 2013-01-04T18:07:04.813 回答
1

很难确切地说,但我认为你有两个问题:

  1. Element.findall()根据 docs,仅查找该元素的直接子元素。

  2. 您需要指定该标签所属的命名空间。例如:

    列表(tree.iter('{http://www.w3.org/2005/Atom}已发布'))

于 2013-01-04T17:49:51.693 回答