2013-04-06 5 views
9

Also, ich bin Herumspielen mit urllib.request in Python 3 und frage mich, wie das Ergebnis immer eine Internet-Datei in eine Datei auf dem lokalen Computer zu schreiben. Ich versuchte dies:Wie lade ich eine Datei mit urllib.request in Python 3 herunter?

g = urllib.request.urlopen('http://media-mcw.cursecdn.com/3/3f/Beta.png') 
with open('test.png', 'b+w') as f: 
    f.write(g) 

Aber ich habe diesen Fehler:

TypeError: 'HTTPResponse' does not support the buffer interface 

Was mache ich falsch?

ANMERKUNG: Ich habe this question gesehen, aber es ist im Zusammenhang mit Python 2 ist urllib2 die 3.

+0

möglich Duplikat von [Datei aus dem Web herunterladen in Python 3] (http://stackoverflow.com/questions/7243750/download-file-from-web-in-python--3) – kenorb

Antwort

8

Änderung

f.write(g) 

zu

in Python überarbeitet wurde
f.write(g.read()) 
0

Ein einfacherer Weg, ich denke, (auch Sie können es in zwei Zeilen tun) ist zu verwenden:

import urllib.request 
urllib.request.urlretrieve('http://media-mcw.cursecdn.com/3/3f/Beta.png', 'test.png') 

Was die Methode, die Sie verwendet haben. Wenn Sie g = urllib.request.urlopen('http://media-mcw.cursecdn.com/3/3f/Beta.png') verwenden, holen Sie nur die Datei. Sie müssen verwenden g.read(), g.readlines() oder g.readline() sie es zu lesen.

Es ist wie das Lesen einer normalen Datei (mit Ausnahme der Syntax) und kann auf sehr ähnliche Weise behandelt werden.

+0

Die 'PEP20' würde Sie haben Verwenden Sie 'Request' von' urllib.request', aber Ihre Zeile würde weniger Code enthalten. [Informationen über PEP20 für Anfrage] (https://docs.python.org/3.2/library/urllib.request.html). Sie können 'open()' verketten, um 'file.write (url.read())' wie Sie erwähnten. – Debug255

+0

@ Debug255 Sind Sie sicher? Der Link namens 'Öffnen Sie die URL-URL, die entweder eine Zeichenfolge oder ein Request-Objekt sein kann. 'Hier habe ich eine Zeichenfolge angegeben, daher glaube ich nicht, dass Request in diesem Fall erforderlich ist. – Simon