此代码用于查找列表中的第一个元素,该元素包含一个包含三个字符串之一的子元素:'fanart','graphical'或'poster'。如果我找到其中一个字符串,我会将包含URL文本的元素标记添加到列表中,并将电影添加到下一个字符串中。最终结果是我得到3个包含3个URL到3个图像的字符串,然后我将下载。但是,此函数返回一个包含1个项而不是3个的列表,我不知道为什么。有人能指出我做错了什么吗?为清楚起见,我还包括了XML文件结构。
def get_banner(target):
#Finds urls of show images
urls = []
types = ['fanart', 'graphical', 'poster']
tree = et.parse(target)
root = tree.getroot()
for banner in root.findall('Banner'):
url = 'http://thetvdb.com/banners/' + banner.find('BannerPath').text
type_ = banner.find('BannerType').text
print url
if type_ == types[0]:
urls.append(url)
break
for banner in root.findall('banner'):
url = 'http://thetvdb.com/banners/' + banner.find('BannerPath').text
type_ = banner.find('BannerType').text
print url
if type_ == types[1]:
urls.append(url)
break
for banner in root.findall('banner'):
url = 'http://thetvdb.com/banners/' + banner.find('BannerPath').text
type_ = banner.find('BannerType').text
if type_ == types[2]:
urls.append(url)
break
return urls
<Banners>
<Banner>
<id>406321</id>
<BannerPath>fanart/original/81189-21.jpg</BannerPath>
<BannerType>fanart</BannerType>
<BannerType2>1920x1080</BannerType2>
<Colors>|234,222,110|0,0,0|103,103,103|</Colors>
<Language>en</Language>
<Rating>7.0930</Rating>
<RatingCount>43</RatingCount>
<SeriesName>false</SeriesName>
<ThumbnailPath>_cache/fanart/original/81189-21.jpg</ThumbnailPath>
<VignettePath>fanart/vignette/81189-21.jpg</VignettePath>
</Banner>
</Banners>
答案 0 :(得分:1)
简单回答:
root.findall('banner') != root.findall('Banner')
XML标记区分大小写。
我认为您也可以通过将所有内容放在一个循环中来稍微压缩您的代码:
def get_banner(target):
#Finds urls of show images
urls = []
types = ['fanart', 'graphical', 'poster']
tree = et.parse(target)
root = tree.getroot()
for banner in root.findall('Banner'):
url = 'http://thetvdb.com/banners/' + banner.find('BannerPath').text
type_ = banner.find('BannerType').text
if not types:
break
elif type_ in types:
urls.append(url)
types.remove(type_)
return urls
types.remove(type_)
语句应该确保您只返回三种类型中的每一种匹配。