wget Vs urlretrieve von python

8

Ich habe eine Aufgabe, Gbs von Daten von einer Website herunterzuladen. Die Daten haben die Form von .gz-Dateien, wobei jede Datei 45mb groß ist.

Der einfachste Weg, um die Dateien zu bekommen, ist "wget ​​-r -np -A files url". Dies wird Daten in einem rekursiven Format herunterladen und spiegelt die Website. Die Donwload Rate ist sehr hoch 4mb / sec.

Aber, um herumzuspielen, habe ich auch Python verwendet, um meinen URL-Parser zu erstellen.

Das Herunterladen über Pythons URL ist langsam, viermal so langsam wie wget. Die Downloadrate beträgt 500 KB / Sek. Ich benutze HTMLParser zum Parsen der href-Tags.

Ich bin mir nicht sicher, warum das passiert. Gibt es irgendwelche Einstellungen dafür?

Danke

    
Kapil D 10.06.2009, 10:18
quelle

10 Antworten

39

Wahrscheinlich eine Einheitsfehlerrechnung von Ihrer Seite.

Beachten Sie, dass 500 KB / s (Kilobyte) ist gleich 4 MB / s (Megabit) .

    
Triptych 10.06.2009 18:14
quelle
8

urllib funktioniert für mich so schnell wie wget. Probieren Sie diesen Code aus. es zeigt den Fortschritt in Prozent genauso wie wget.

%Vor%     
Xuan 05.01.2010 01:27
quelle
3

Was das HTML-Parsing anbelangt, ist es wahrscheinlich am schnellsten / einfachsten, lxml zu verwenden Was die http-Anfragen selbst betrifft: Ссылка ist sehr einfach zu verwenden und könnte möglicherweise Downloads beschleunigen, da es http 1.1 unterstützt Keep-Alive-Verbindungen und Gzip-Komprimierung. Es gibt auch pycURL , das behauptet, sehr schnell zu sein (aber schwieriger zu benutzen), und ist auf curllib aufgebaut, aber ich habe es nie getan benutzt das.

Sie können auch versuchen, verschiedene Dateien gleichzeitig herunterzuladen, aber denken Sie auch daran, dass das Versuchen, Ihre Download-Zeiten zu weit zu optimieren, gegenüber der fraglichen Website nicht sehr höflich ist.

Sorry für das Fehlen von Hyperlinks, aber SO sagt mir "Entschuldigung, neue Benutzer können maximal einen Hyperlink veröffentlichen"

    
Steven 10.06.2009 18:46
quelle
3

Übertragungsgeschwindigkeiten können leicht irreführend sein. Könnten Sie mit dem folgenden Skript versuchen, das einfach die gleiche URL mit wget und urllib.urlretrieve herunterlädt - führen Sie es ein paar Mal aus, wenn Sie hinter einem Proxy sind, der die URL beim zweiten Versuch.

Bei kleinen Dateien dauert wget wegen der Startzeit des externen Prozesses ein wenig länger, bei größeren Dateien sollte es jedoch irrelevant sein.

%Vor%     
dbr 11.06.2009 13:47
quelle
1

Vielleicht können Sie wget und dann die Daten in Python überprüfen?

    
Aiden Bell 10.06.2009 10:38
quelle
1
%Vor%     
nosklo 10.06.2009 18:10
quelle
1

Da Python vorschlägt, urllib2 anstelle von urllib zu verwenden, mache ich einen Test zwischen urllib2.urlopen und wget .

Das Ergebnis ist, dass es fast die gleiche Zeit für beide dauert, dieselbe Datei herunterzuladen. Manchmal macht urllib2 sogar noch besser.

Der Vorteil von wget liegt in einem dynamischen Fortschrittsbalken, um den Prozentsatz der fertiggestellten Dateien und die aktuelle Downloadgeschwindigkeit beim Übertragen anzuzeigen.

Die Dateigröße in meinem Test ist 5MB . Ich habe kein Cache-Modul in Python verwendet und mir ist nicht bekannt, wie wget beim Herunterladen großer Dateigrößen funktioniert.

    
Kai 16.10.2011 07:13
quelle
0

Es sollte wirklich keinen Unterschied geben. Alle urlretrieve macht eine einfache HTTP-GET-Anfrage. Haben Sie Ihren Datenverarbeitungscode herausgenommen und einen direkten Durchsatzvergleich von wget vs. pure python durchgeführt?

    
Corey Goldberg 10.06.2009 13:55
quelle
0

Bitte zeigen Sie uns etwas Code. Ich bin mir ziemlich sicher, dass es mit dem Code und nicht auf urlretrieve sein muss.

Ich habe in der Vergangenheit damit gearbeitet und hatte nie Probleme mit der Geschwindigkeit.

    
miya 10.06.2009 14:59
quelle
0

Sie können wget -k verwenden, um relative Links in allen URLs zu aktivieren.

    
Alex 28.02.2010 09:35
quelle

Tags und Links