2017-09-03 3 views
0

Ich habe eine Liste von URLs von einigen Bildern, und ich möchte, dass sie Import urllib herunterladenpython2.7 wie urllib Schleife Bilder zum Download

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) 

Ich verstehe, wie man zu einem Zeitpunkt abrufen ... .when ich diesen Code versuchen, bekomme ich diesen Fehler

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

keine Antworten werden Erklärungen geschätzt

Antwort

1

Die erste for Schleife gibt es eine Liste von Dateinamen zu erstellen image0.png zu image3.png, richtig ?! Das schlägt fehl und erzeugt eine Liste von nur einem Element ('image3.png'), weil Sie die Liste innerhalb der Schleife neu initialisieren. Sie müssen es einmal vor der Schleife initialisieren. Sie können dies leicht überprüfen, ob Sie eine print name nach der Schleife setzen

Das zweite Problem ist, dass Sie eine Liste zu urllib.urlretrieve Ihre Frage passieren ist in dieser Hinsicht nicht klar, aber tun Sie 4 Bilder benannt image0 herunterladen möchten. png ... image3.png von jeder der angegebenen URLs? So sieht dein Code aus.

Wenn ja, benötigen Sie eine verschachtelte Schleife über die Namen in der Liste der Dateinamen. Ich habe den Code unten entsprechend geändert. Aber Ihre URLs enthalten bereits einen Dateinamen, also bin ich mir nicht sicher, was die wirkliche Absicht ist.

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

BTW, 'Namen = [ "Bild {}. Png" .format (x) für x in Bereich (4)]' –

+1

Dank @ cricket_007, Liste Verständnis ist eine sehr schöne und leistungsstarke Funktion von Python – jps

+0

Danke euch beiden ... Ich habe meinen Fehler verstanden und auch einen Arbeitscode gefunden .... –