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

Python2.7 how to loop urllib to download images

我有一些图片的 url 列表,我想下载它们 导入 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 (most recent call last): File "C:/Python27/metal memes/test1.py", line 17, in urllib.urlretrieve(q,name) File "C:\Python27\lib\urllib.py", line 98, in urlretrieve return opener.retrieve(url, filename, reporthook, data) File "C:\Python27\lib\urllib.py", line 249, in retrieve tfp = open(filename, 'wb') TypeError: coercing to Unicode: need string or buffer, list found

任何答案,解释表示赞赏

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

之后放一个 print name 就可以很容易地检查这一点

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

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

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)