Seite 1 von 1

Dateien aus dem Internet herunterladen

Verfasst: Sonntag 2. März 2008, 18:15
von pot
Hallo

Ich möchte mit Python eine Datei aus dem Internet laden. Mit urllib2 würde das auch schön gehen, leider muss ich da erst die ganze Datei (mehrere MB gross) in eine Variable speichern und erst dann auf das Dateisystem abspeichern.

Code: Alles auswählen

from urllib2 import urlopen

content = urlopen(url).read()
file = open(filename, 'w')
file.write(content)
file.close()
Diese Art finde ich allerdings sehr unschön (Speicher des Programms erhöht sich)

Gibts da Alternativen?

Grüsse
Pot

Re: Dateien aus dem Internet herunterladen

Verfasst: Sonntag 2. März 2008, 18:51
von BlackVivi
Hm... mit urlopen öffnen und zeilenweise bzw. 100 bytes oder sowas lesen und dann schreiben in'r Schleife ._. Würde mir spontan einfallen.

Verfasst: Sonntag 2. März 2008, 18:53
von veers

Code: Alles auswählen

import shutil
import urllib2
source = urllib2.urlopen(url)
destination = open(filename, 'w')
shutil.copyfileobj(source, destination)
source.close()
destination.close()
So? ;)

Verfasst: Sonntag 2. März 2008, 19:04
von pot
Danke, funktioniert wunderbar ;-)

Grüsse
Pot

Verfasst: Sonntag 2. März 2008, 21:03
von EyDu

Code: Alles auswählen

import urllib
urllib.urlretrieve(url, filename)

Verfasst: Sonntag 2. März 2008, 21:20
von gerold
Hallo!

Und ich möchte noch ``urllib.urlretrieve`` einwerfen.

mfg
Gerold
:-)

Verfasst: Dienstag 4. März 2008, 17:59
von pot
Ist ja noch kürzer, danke.
Ist es mit urllib.urlretrieve möglich, einen "Ladebalken" zu erstellen?

Grüsse
Pot

Verfasst: Dienstag 4. März 2008, 18:06
von Trundle
pot hat geschrieben:Ist es mit urllib.urlretrieve möglich, einen "Ladebalken" zu erstellen
Ja, man kann als drittes Argument eine Funktion übergeben, die dann aufgerufen wird, wenn ein Daten-Block gelesen wurde. Mehr dazu steht in der Dokumentation.

Verfasst: Dienstag 4. März 2008, 18:08
von pot
Trundle hat geschrieben:
pot hat geschrieben:Ist es mit urllib.urlretrieve möglich, einen "Ladebalken" zu erstellen
Ja, man kann als drittes Argument eine Funktion übergeben, die dann aufgerufen wird, wenn ein Daten-Block gelesen wurde. Mehr dazu steht in der Dokumentation.
Danke dir.

Gruss
Pot