it-swarm.com.de

Einfacher Download und Speichern von http-Dateien auf Festplatte in Python?

Ich bin neu in Python und habe die Fragen und Antworten auf dieser Website durchgegangen, um eine Antwort auf meine Frage zu erhalten. Ich bin jedoch ein Anfänger und finde es schwierig, einige der Lösungen zu verstehen. Ich brauche eine sehr einfache Lösung.

Könnte jemand bitte eine einfache Lösung zum "Herunterladen einer Datei über http" und "Speichern unter Windows" für mich erklären?

Ich bin mir auch nicht sicher, wie man mit den Modulen shutil und os arbeitet.

Die Datei, die ich herunterladen möchte, ist unter 500 MB und ist eine .gz-Archivdatei. Wenn jemand erklären kann, wie das Archiv extrahiert und die Dateien darin verwendet werden, wäre das großartig!

Hier ist eine Teillösung, die ich aus verschiedenen Antworten zusammen geschrieben habe:

import requests
import os
import shutil

global dump

def download_file():
    global dump
    url = "http://randomsite.com/file.gz"
    file = requests.get(url, stream=True)
    dump = file.raw

def save_file():
    global dump
    location = os.path.abspath("D:\folder\file.gz")
    with open("file.gz", 'wb') as location:
        shutil.copyfileobj(dump, location)
    del dump

Könnte jemand auf Fehler hinweisen (Anfänger) und einfachere Methoden erklären, um dies zu tun?

Vielen Dank!

127
arvindch

Eine saubere Methode zum Herunterladen einer Datei ist:

import urllib

testfile = urllib.URLopener()
testfile.retrieve("http://randomsite.com/file.gz", "file.gz")

Dadurch wird eine Datei von einer Website heruntergeladen und file.gz benannt. Dies ist eine meiner Lieblingslösungen von Laden eines Bildes über urllib und Python .

In diesem Beispiel wird die Bibliothek urllib verwendet, und die Datei wird direkt von einer Quelle abgerufen.

182
Blue Ice

Wie erwähnt hier :

import urllib
urllib.urlretrieve ("http://randomsite.com/file.gz", "file.gz")

EDIT: Wenn Sie noch Anfragen verwenden möchten, werfen Sie einen Blick auf diese Frage oder diese .

97
dparpyani

Ich benutze wget .

Einfache und gute Bibliothek, wenn Sie ein Beispiel geben wollen?

import wget

file_url = 'http://johndoe.com/download.Zip'

file_name = wget.download(file_url)

wget-Modul unterstützt Python 2- und Python 3-Versionen

31
Ali

Vier Methoden mit wget, urllib und request.

#!/usr/bin/python
import requests
from StringIO import StringIO
from PIL import Image
import profile as profile
import urllib
import wget


url = 'https://tinypng.com/images/social/website.jpg'

def testRequest():
    image_name = 'test1.jpg'
    r = requests.get(url, stream=True)
    with open(image_name, 'wb') as f:
        for chunk in r.iter_content():
            f.write(chunk)

def testRequest2():
    image_name = 'test2.jpg'
    r = requests.get(url)
    i = Image.open(StringIO(r.content))
    i.save(image_name)

def testUrllib():
    image_name = 'test3.jpg'
    testfile = urllib.URLopener()
    testfile.retrieve(url, image_name)

def testwget():
    image_name = 'test4.jpg'
    wget.download(url, image_name)

if __== '__main__':
    profile.run('testRequest()')
    profile.run('testRequest2()')
    profile.run('testUrllib()')
    profile.run('testwget()')

testRequest - 4469882 Funktionsaufrufe (4469842 Primitive Calls) in 20.236 Sekunden

testRequest2 - 8580 Funktionsaufrufe (8574 Grundaufrufe) in 0,072 Sekunden

testUrllib - 3810 Funktionsaufrufe (3775 Grundaufrufe) in 0,036 Sekunden

testwget - 3489 Funktionsaufrufe in 0.020 Sekunden

24
Saurabh yadav

Exotische Windows-Lösung

import subprocess

subprocess.run("powershell Invoke-WebRequest {} -OutFile {}".format(your_url, filename), Shell=True)
2
Brut

Für Python3 + URLopener ist veraltet. Und wenn Sie verwendet werden, erhalten Sie Fehler wie folgt:

url_opener = urllib.URLopener () AttributeError: Modul 'urllib' hat kein Attribut 'URLopener'

Also versuche:

import urllib.request 
urllib.request.urlretrieve(url, filename)
0
Om Prakash Sao

Ich habe diesen Weg eingeschlagen, weil ESPIs Wget nicht mit SSL kompiliert wurde und ich eine OVA von der Website eines Anbieters direkt auf den ESXi-Host herunterladen wollte, der sich auf der anderen Seite der Welt befindet.

Ich musste die Firewall deaktivieren (faul)/https out aktivieren, indem die Regeln bearbeitet wurden (richtig).

das Python-Skript erstellt:

import ssl
import shutil
import tempfile
import urllib.request
context = ssl._create_unverified_context()

dlurl='https://somesite/path/whatever'
with urllib.request.urlopen(durl, context=context) as response:
    with open("file.ova", 'wb') as tmp_file:
        shutil.copyfileobj(response, tmp_file)

ESXi-Bibliotheken sind eine Art paarweise herabgestuft, aber das Open Source Wiesel-Installationsprogramm schien urllib für https zu verwenden ... daher hat es mich inspiriert, diesen Weg zu gehen

0
Jayme Snyder