我使用
下载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
我想获取视频ID,例如" x_HFR3Hmv44"来自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文件不能由xml.etree.cElementTree处理? 有像这样的标签,而yt没有在文件中定义
答案 0 :(得分:1)
很难确切地说,但我认为你有两个问题:
Element.findall()
仅根据the docs找到该元素的直接子元素。
您需要指定此标记所属的命名空间。例如:
列表(tree.iter( '{} http://www.w3.org/2005/Atom出版'))
答案 1 :(得分:1)
您只是对XML结构感到困惑。将prettyprint=true
添加到查询字符串以获取缩进的xml,这将使您更容易阅读。另请咨询YouTube's element reference links以了解会发生什么。
这将帮助您入门:
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'))