0

我有一些图片的 url 列表,我想下载它们 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)

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

回溯(最后一次调用):文件“C:/Python27/metal memes/test1.py”,第 17 行,在 urllib.urlretrieve(q,name) 文件“C:\Python27\lib\urllib.py”,行98、在 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:需要字符串或缓冲区,找到列表

任何答案,解释表示赞赏

4

1 回答 1

2

第一个for循环是创建一个从 image0.png 到 image3.png 的文件名列表,对吧?!这会失败并生成一个仅包含一个元素的列表('image3.png'),因为您在循环内重新初始化了列表。您必须在循环之前对其进行一次初始化。如果你print name在循环之后放一个,你可以很容易地检查这个

第二个问题是,您将列表传递给urllib.urlretrieve 您的问题在这方面尚不清楚,但是您是否要从每个给定的 url 下载 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)
于 2017-09-03T19:07:43.627 回答