615 Stimmen

Wget/curl große Datei von Google Drive herunterladen

Ich versuche, eine Datei von Google Drive in einem Skript herunterzuladen, und habe dabei ein kleines Problem. Die Dateien, die ich herunterladen möchte, sind hier.

Ich habe online intensiv nach Informationen gesucht und es schließlich geschafft, eine davon herunterzuladen. Ich habe die UIDs der Dateien bekommen und die kleinere (1,6 MB) wird ohne Probleme heruntergeladen, jedoch wird die größere Datei (3,7 GB) immer auf eine Seite umgeleitet, die mich fragt, ob ich den Download ohne Virenscan fortsetzen möchte. Kann mir jemand helfen, diese Seite zu umgehen?

So habe ich die erste Datei zum Laufen gebracht -

curl -L "https://docs.google.com/uc?export=download&id=0Bz-w5tutuZIYeDU0VDRFWG9IVUE" > phlat-1.0.tar.gz

Wenn ich dasselbe mit der anderen Datei mache,

curl -L "https://docs.google.com/uc?export=download&id=0Bz-w5tutuZIYY3h5YlMzTjhnbGM" > index4phlat.tar.gz

Bekomme ich die folgende Ausgabe - enter image description here

Ich bemerke auf der vorletzten Zeile des Links, dass ein &confirm=JwkK vorhanden ist, was eine zufällige 4-Zeichenfolge ist, aber darauf hinweist, dass es einen Weg gibt, eine Bestätigung zu meiner URL hinzuzufügen. Einer der Links, den ich besucht habe, schlug &confirm=no_antivirus vor, aber das funktioniert nicht.

779voto

phi Punkte 8862

Du kannst gdown verwenden. Schau dir auch die Seite für vollständige Anleitungen an; dies hier ist nur eine Zusammenfassung und das Quell-Repository könnte aktuellere Anweisungen haben.


Anleitungen

Installiere es mit dem folgenden Befehl:

pip install gdown

Danach kannst du jede Datei von Google Drive herunterladen, indem du einen dieser Befehle ausführst:

gdown https://drive.google.com/uc?id=  # für Dateien
gdown                                  # alternative Format
gdown --folder https://drive.google.com/drive/folders/  # für Ordner
gdown --folder --id                                    # dieses Format funktioniert auch für Ordner

Beispiel: um die Readme-Datei aus diesem Verzeichnis herunterzuladen

gdown https://drive.google.com/uc?id=0B7EVK8r0v71pOXBhSUdJWU1MYUk

Die file_id sollte ungefähr so aussehen: 0Bz8a_Dbh9QhbNU3SGlFaDg. Du kannst diese ID finden, indem du mit der rechten Maustaste auf die Datei klickst und Link kopieren auswählst. Stand November 2021 wird der Link folgendermaßen aussehen:

# Dateien
https://drive.google.com/file/d//view?usp=sharing
# Ordner
https://drive.google.com/drive/folders/

Einschränkungen

  • Funktioniert nur bei Dateien mit offenem Zugriff. ("Jeder mit einem Link kann ansehen")
  • Kann nicht mehr als 50 Dateien in einen einzigen Ordner herunterladen.
    • Wenn du Zugriff auf die Quelldatei hast, könntest du erwägen, tar/zip zu verwenden, um es zu einer einzelnen Datei umzuleiten, um diese Beschränkung zu umgehen.

227voto

turdus-merula Punkte 7918

Ich habe einen Python-Schnipsel geschrieben, der eine Datei von Google Drive herunterlädt, basierend auf einem freigegebenen Link.

Der Schnipsel verwendet weder gdrive noch die Google Drive API. Er verwendet das requests Modul.

Beim Herunterladen großer Dateien von Google Drive reicht eine einzelne GET-Anforderung nicht aus. Es wird eine zweite benötigt, und diese hat einen zusätzlichen URL-Parameter namens confirm, dessen Wert dem Wert eines bestimmten Cookies entsprechen sollte.

import requests

def download_file_from_google_drive(id, destination):
    def get_confirm_token(response):
        for key, value in response.cookies.items():
            if key.startswith('download_warning'):
                return value

        return None

    def save_response_content(response, destination):
        CHUNK_SIZE = 32768

        with open(destination, "wb") as f:
            for chunk in response.iter_content(CHUNK_SIZE):
                if chunk: # filter out keep-alive new chunks
                    f.write(chunk)

    URL = "https://docs.google.com/uc?export=download"

    session = requests.Session()

    response = session.get(URL, params = { 'id' : id }, stream = True)
    token = get_confirm_token(response)

    if token:
        params = { 'id' : id, 'confirm' : token }
        response = session.get(URL, params = params, stream = True)

    save_response_content(response, destination)    

if __name__ == "__main__":
    import sys
    if len(sys.argv) is not 3:
        print("Verwendung: python google_drive.py drive_file_id destination_file_path")
    else:
        # NEHME ID VOM FREIGEGEBENEN LINK
        file_id = sys.argv[1]
        # ZIELDATEI AUF DEINEM DATENTRÄGER
        destination = sys.argv[2]
        download_file_from_google_drive(file_id, destination)

106voto

Benyamin Jafari Punkte 20585
  • Zuerst extrahieren Sie die ID Ihrer gewünschten Datei aus Google Drive:

    1. Rufen Sie in Ihrem Browser drive.google.com auf.

    2. Klicken Sie mit der rechten Maustaste auf die Datei und wählen Sie "Freigabelink erhalten"

      Mit der rechten Maustaste auf Freigabelink erhalten klicken

    3. Extrahieren Sie dann die ID der Datei aus der URL:

      Die Beschreibung des Bildes hier eingeben

  • Installieren Sie dann das gdown PyPI-Modul mit pip:

    pip install gdown

  • Schließlich laden Sie die Datei mithilfe von gdown und der gewünschten ID herunter:

    gdown --id


[HINWEIS]:

  • In google-colab müssen Sie ! vor bash Befehlen verwenden.
    (d.h. !gdown --id 1-1wAx7b-USG0eQwIBVwVDUl3K1_1ReCt)
  • Sie sollten die Berechtigung der beabsichtigten Datei von "Eingeschränkt" auf "Jeder mit dem Link" ändern.

92voto

tanius Punkte 9822

Ab März 2022 können Sie das Open-Source plattformübergreifende Kommandozeilen-Tool gdrive verwenden. Im Gegensatz zu anderen Lösungen kann es auch Ordner herunterladen ohne Einschränkungen und kann auch mit nicht öffentlichen Dateien arbeiten.

Quelle: Ich habe von gdrive durch einen Kommentar von Tobi in einer anderen Antwort hier erfahren.

Aktueller Zustand

Es gab zuvor Probleme mit diesem Tool, das nicht von Google verifiziert wurde und nicht gepflegt wurde. Beide Probleme wurden seit einem Commit vom 28. Mai 2021 behoben. Das bedeutet auch, dass das zuvor benötigte Workaround mit einem Google-Dienstkonto nicht mehr erforderlich ist. (In seltenen Fällen können Sie dennoch auf Probleme stoßen; wenn dies der Fall ist, versuchen Sie es mit dem ntechp-fork.)

Installation von gdrive

  1. Laden Sie die Version 2.1.1 herunter. Wählen Sie ein Paket, das zu Ihrem Betriebssystem passt, zum Beispiel gdrive_2.1.1_linux_amd64.tar.gz.

  2. Kopieren Sie es in Ihren Pfad.

    gunzip gdrive_2.1.1_linux_amd64.tar.gz
    sudo mkdir /usr/local/bin/gdrive
    sudo cp gdrive-linux-amd64 /usr/local/bin/gdrive
    sudo chmod a+x /usr/local/bin/gdrive

Verwendung von gdrive

  1. Bestimmen Sie die Google Drive Datei-ID. Klicken Sie dazu mit der rechten Maustaste auf die gewünschte Datei auf der Google Drive-Website und wählen Sie "Link erhalten …". Es wird etwas wie https://drive.google.com/open?id=0B7_OwkDsUIgFWXA1B2FPQfV5S8H zurückgeben. Kopieren Sie die Zeichenfolge hinter dem ?id= und fügen Sie sie in die Zwischenablage ein. Das ist die Datei-ID.

  2. Laden Sie die Datei herunter. Verwenden Sie natürlich statt dessen die Datei-ID in folgendem Befehl.

    gdrive download 0B7_OwkDsUIgFWXA1B2FPQfV5S8H
  3. Bei der ersten Verwendung muss das Tool Zugriffsberechtigungen für die Google Drive API erhalten. Dazu wird es Ihnen einen Link anzeigen, den Sie in einem Browser besuchen müssen, und dann erhalten Sie einen Verifizierungscode, den Sie zurück in das Tool kopieren und einfügen müssen. Der Download beginnt dann automatisch. Es gibt keinen Fortschrittsanzeiger, aber Sie können den Fortschritt in einem Dateimanager oder in einem zweiten Terminal beobachten.

Zusätzlicher Trick: Begrenzung der Datenrate. Um mit gdrive mit einer begrenzten maximalen Rate herunterzuladen (um das Uploadlimit im lokalen Netzwerk nicht zu überlasten…), können Sie einen Befehl wie folgt verwenden:

gdrive download --stdout 0B7_OwkDsUIgFWXA1B2FPQfV5S8H | \
    pv -br -L 90k | cat > file.ext

pv ist PipeViewer. Der Befehl zeigt die heruntergeladene Datenmenge (-b) und die Downloadrate (-r) an und begrenzt diese Rate auf 90 kiB/s (-L 90k).

85voto

thouliha Punkte 5515

Hier ist eine schnelle Möglichkeit, das zu tun.

Stellen Sie sicher, dass der Link freigegeben ist, und er wird ungefähr so aussehen:

https://drive.google.com/open?id=FILE_ID&authuser=0

Kopieren Sie dann diese FILE_ID und verwenden Sie sie so:

wget --no-check-certificate 'https://docs.google.com/uc?export=download&id=FILEID' -O DATEINAME

Wenn die Datei groß ist und die Virusprüfungsseite auslöst, können Sie dies tun (aber es werden zwei Dateien heruntergeladen, eine html-Datei und die tatsächliche Datei):

wget --no-check-certificate 'https://docs.google.com/uc?export=download&id=FILEID' -r -A 'uc*' -e robots=off -nd

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X