2017-09-03 48 views
0

我有一些圖片的URL列表,我想下載它們 進口的urllibPython2.7如何循環的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

任何答案,解釋讚賞

回答

1

第一for循環是有創建的文件名列表image0.png到image3.png,對不對?這會失敗併產生一個只包含一個元素('image3.png')的列表,因爲您在循環內重新初始化列表。你必須在循環之前初始化一次。如果你把一個print name循環

第二個問題是後,您可以輕鬆地檢查這個,你傳遞一個列表urllib.urlretrieve 你的問題並不清楚在這方面,但是你要下載一個名爲image0 4個圖像。 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) 
+2

順便說一句,'名= [ 「圖像{}。PNG」 .format(x)的有效範圍內的X(4)]' –

+1

感謝@ cricket_007,列表解析是蟒 – jps

+0

的非常好的和強大的功能感謝你們兩個......我明白我的錯誤,並找到一個工作代碼.... –