Ich erstelle ein Programm, das eine JAR-Datei (Java) von einem Webserver herunterlädt, indem ich die URL lese, die in der JAD-Datei desselben Spiels / derselben Anwendung angegeben ist. Ich benutze Python 3.2.1
Ich habe es geschafft, die URL der JAR-Datei aus der JAD-Datei zu extrahieren (jede JAD-Datei enthält die URL zur JAR-Datei), aber wie Sie sich vorstellen können, ist der extrahierte Wert type () string.
Hier ist die relevante Funktion:
def downloadFile(URL=None):
import httplib2
h = httplib2.Http(".cache")
resp, content = h.request(URL, "GET")
return content
downloadFile(URL_from_file)
Ich erhalte jedoch immer die Fehlermeldung, dass der Typ in der obigen Funktion Bytes und keine Zeichenfolge sein muss. Ich habe versucht, den URL.encode ('utf-8') und auch Bytes (URL, encoding = 'utf-8') zu verwenden, aber ich habe immer den gleichen oder einen ähnlichen Fehler erhalten.
Meine Frage ist also im Grunde, wie man eine Datei von einem Server herunterlädt, wenn die URL in einem Zeichenfolgentyp gespeichert ist.
quelle
Antworten:
Wenn Sie den Inhalt einer Webseite in eine Variable umwandeln möchten, geben Sie einfach
read
die Antwort vonurllib.request.urlopen
:Der einfachste Weg, eine Datei herunterzuladen und zu speichern, ist die Verwendung der folgenden
urllib.request.urlretrieve
Funktion:Beachten Sie jedoch, dass dies
urlretrieve
als Vermächtnis betrachtet wird und möglicherweise veraltet ist (ich weiß jedoch nicht warum).Der korrekteste Weg, dies zu tun, wäre die Verwendung der
urllib.request.urlopen
Funktion, um ein dateiähnliches Objekt zurückzugeben, das eine HTTP-Antwort darstellt, und es mit in eine echte Datei zu kopierenshutil.copyfileobj
.Wenn dies zu kompliziert erscheint, möchten Sie möglicherweise einfacher vorgehen und den gesamten Download in einem
bytes
Objekt speichern und dann in eine Datei schreiben. Dies funktioniert jedoch nur für kleine Dateien.Es ist möglich,
.gz
komprimierte Daten im laufenden Betrieb zu extrahieren (und möglicherweise auch in anderen Formaten), aber für einen solchen Vorgang muss der HTTP-Server wahrscheinlich den wahlfreien Zugriff auf die Datei unterstützen.quelle
response.info().get_param('charset', 'utf-8')
anstelle der Hardcodierung verwendenutf-8
, um die Zeichencodierung aus demContent-Type
Header zu erhaltenoutfile.write(data)
nur für kleine Dateien?ich benutze
requests
Paket immer dann, wenn ich etwas mit HTTP-Anfragen zu tun haben möchte, da die API sehr einfach zu starten ist:Installieren Sie zuerst
requests
dann der Code:
quelle
Ich hoffe, ich habe die Frage richtig verstanden: Wie lade ich eine Datei von einem Server herunter, wenn die URL in einem Zeichenfolgentyp gespeichert ist?
Ich lade Dateien herunter und speichere sie lokal mit dem folgenden Code:
quelle
Hier können wir die Legacy-Oberfläche von urllib in Python3 verwenden:
Die folgenden Funktionen und Klassen werden vom Python 2-Modul urllib (im Gegensatz zu urllib2) portiert. Sie könnten irgendwann in der Zukunft veraltet sein.
Beispiel (2 Zeilen Code) :
quelle
Sie können dafür wget verwenden, das beliebte Download-Shell-Tool. https://pypi.python.org/pypi/wget Dies ist die einfachste Methode, da die Zieldatei nicht geöffnet werden muss. Hier ist ein Beispiel.
quelle
Ja, Anfragen sind definitiv ein großartiges Paket, um sie in Bezug auf HTTP-Anfragen zu verwenden. Aber wir müssen vorsichtig mit dem Codierungstyp der eingehenden Daten sein. Ein Beispiel, das den Unterschied erklärt
quelle
Motivation
Manchmal möchten wir das Bild erhalten, müssen es aber nicht in echte Dateien herunterladen.
dh laden Sie die Daten und halten Sie sie auf Speicher.
Wenn ich beispielsweise die Methode des maschinellen Lernens verwende, trainiere ein Modell, das ein Bild mit der Nummer (Strichcode) erkennen kann.
Wenn ich einige Websites spinne und diese Bilder habe, damit ich das Modell verwenden kann, um es zu erkennen,
und ich möchte diese Bilder nicht auf meinem Laufwerk speichern,
Anschließend können Sie die folgende Methode ausprobieren, um die Download-Daten im Speicher zu halten.
Punkte
Im Grunde ist wie @Ranvijay Kumar
Ein Beispiel
quelle
quelle