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)
我有一些图片的 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)