Python2.7如何循环urllib下载图像

时间:2017-09-03 11:09:52

标签: python-2.7 urllib urlretrieve

我有一些图片的网址列表,我想下载它们     import urllib

links =  ['http://www.takamine.com/templates/default/images/gclassical.png',
 'https://dk1xgl0d43mu1.cloudfront.net/user_files/esp/product_images/000/010/120/large.png?1389980652',
'https://dk1xgl0d43mu1.cloudfront.net/user_files/esp/product_images/000/020/676/large.png?1453396324']

#urllib.urlretrieve('http://www.takamine.com/templates/default/images/gclassical.png','image.jpg')
for i in range(0,4):
    S1 = 'image'
    S2 = '.png'
    name = list()
    x = S1 + str(i) + S2
    name.append(x)

for q in links:
    urllib.urlretrieve(q,name)

我理解如何一次检索一个....当我尝试这个代码时,我得到了这个错误

  

Traceback(最近一次调用最后一次):File" C:/ Python27 / metal   memes / test1.py",第17行,in       urllib.urlretrieve(q,name)文件" C:\ Python27 \ lib \ urllib.py",第98行,在urlretrieve中       返回opener.retrieve(url,filename,reporthook,data)文件" C:\ Python27 \ lib \ urllib.py",第249行,检索       tfp = open(filename,' wb')TypeError:强制转换为Unicode:需要字符串或缓冲区,找到列表

任何答案,解释都表示赞赏

1 个答案:

答案 0 :(得分:2)

第一个for循环是为了创建一个文件名列表image0.png到image3.png,对吧?!失败并生成一个只包含一个元素的列表('image3.png'),因为您重新初始化循环内的列表。你必须在循环之前初始化它一次。如果在循环后放置print name

,则可以轻松检查

第二个问题是,您将列表传递给urllib.urlretrieve 你的问题在这方面还不清楚,但你想从每个给定的网址下载4张名为image0.png ... image3.png的图片吗?这就是你的代码的样子。

如果是,则需要对文件名列表中的名称进行嵌套循环。我相应地修改了下面的代码。 但是你的网址已经包含了一个文件名,所以我不确定这是什么意思。

links =  ['http://www.takamine.com/templates/default/images/gclassical.png',
 'https://dk1xgl0d43mu1.cloudfront.net/user_files/esp/product_images/000/010/120/large.png?1389980652',
'https://dk1xgl0d43mu1.cloudfront.net/user_files/esp/product_images/000/020/676/large.png?1453396324']

#urllib.urlretrieve('http://www.takamine.com/templates/default/images/gclassical.png','image.jpg')

# create a list of filenames
# either this code:
names = list()
for i in range(0,4):
    S1 = 'image'
    S2 = '.png'
    x = S1 + str(i) + S2
    names.append(x)

# or, as suggested in the comments, much shorter using list comprehension:
names = ["image{}.png".format(x) for x in range(4)]

for q in links:
    for name in names:
        urllib.urlretrieve(q,name)