Zurück zum Blog
Leitfäden
Suciu Dan21. April 20238 Minuten Lesezeit

Mühelose Downloads von Webseiten und Dateien mit Python und wget

Mühelose Downloads von Webseiten und Dateien mit Python und wget

Warum Python?

Python ist eine leistungsstarke und beliebte Programmiersprache, die in verschiedenen Bereichen wie Automatisierung, Data Science und Anwendungsentwicklung eingesetzt wird. Sie ist leicht zu erlernen und verfügt über eine große Bibliothek von Modulen und Frameworks, die ihre Fähigkeiten erweitern.

Warum wget?

Wget ist ein Befehlszeilentool, mit dem Sie Dateien aus dem Internet herunterladen können. Es ist auf den meisten Unix-ähnlichen Systemen, einschließlich Linux und macOS, verfügbar. Wget ist ein vielseitiges Tool, das zum Herunterladen einzelner Dateien, mehrerer Dateien und sogar ganzer Verzeichnisse verwendet werden kann.

Hier sind einige der wichtigsten Funktionen von wget:

  • Herunterladen von Dateien aus dem Internet: Wget kann verwendet werden, um Dateien aus dem Internet herunterzuladen, einschließlich Webseiten, Bilder und andere Dateitypen.
  • Anpassbare Download-Optionen: Mit Wget können Sie verschiedene Optionen zum Anpassen Ihrer Downloads angeben, z. B. das Verzeichnis, in dem die Datei gespeichert werden soll, den Dateinamen und ob vorhandene Dateien überschrieben werden sollen.
  • Unterbrochene Downloads fortsetzen: Wenn ein Download unterbrochen wird, kann wget ihn an der Stelle fortsetzen, an der er unterbrochen wurde, und so Zeit und Bandbreite sparen.
  • Rekursiver Download: wget kann verwendet werden, um eine ganze Website oder ein Verzeichnis herunterzuladen, indem man Links rekursiv folgt.
  • Unterstützung für HTTP, HTTPS und FTP: Wget kann mit verschiedenen Arten von Internetprotokollen umgehen, darunter HTTP, HTTPS und FTP, was es zu einem vielseitigen Tool für das Herunterladen von verschiedenen Servern macht.
  • Auf den meisten Unix-ähnlichen Systemen verfügbar: Wget ist auf den meisten Unix-ähnlichen Systemen, einschließlich Linux und macOS, verfügbar und kann somit auf einer Vielzahl von Plattformen verwendet werden.

Warum wget mit Python verwenden?

Python und wget können kombiniert werden, um den Prozess des Herunterladens von Webseiten und Dateien zu automatisieren und so Zeit und Mühe zu sparen. Wget kann über Python angepasst werden, und Aufgaben zum Web-Scraping oder Herunterladen von Dateien können in bestehende Python-Skripte integriert werden.

Es gibt mehrere Gründe, warum man wget mit Python verwenden möchte:

  • Automatisierung: Durch die Verwendung von wget mit Python können Sie den Prozess des Herunterladens von Dateien aus dem Internet automatisieren. Dies kann Zeit und Mühe sparen, insbesondere wenn Sie eine große Anzahl von Dateien oder Websites herunterladen müssen.
  • Anpassungen: Mit wget können Sie verschiedene Optionen zur Anpassung Ihrer Downloads angeben, z. B. das Verzeichnis, in dem die Datei gespeichert werden soll, den Dateinamen und ob vorhandene Dateien überschrieben werden sollen. Wenn Sie wget mit Python verwenden, können Sie diese Optionen programmgesteuert festlegen und Ihre Downloads nach Ihren Bedürfnissen anpassen.
  • Benutzerfreundlichkeit: Python ist bekannt für seine Einfachheit und Lesbarkeit, was es zu einer leicht zu erlernenden und zu verwendenden Sprache macht. Durch die Verwendung von wget mit Python können Sie die Leistungsfähigkeit von Python nutzen, um Web-Scraping und Dateidownloads zu vereinfachen.
  • Skalierbarkeit: Python ist eine skalierbare Sprache, die in der Lage ist, große Datenmengen zu verarbeiten. Durch die Verwendung von wget mit Python können Sie Ihre Web-Scraping- oder Dateidownload-Aufgaben skalieren, um größere Datenmengen zu verarbeiten.

Erste Schritte

Nachdem wir nun die einzelnen und kombinierten Vorteile von Python und wget erörtert haben, kommen wir nun zum Schreiben des Codes.

Installation von wget

Stellen Sie sicher, dass wget auf Ihrem Computer installiert ist. Wenn Ihr bevorzugtes Betriebssystem Linux ist, haben Sie es bereits installiert.

  • Wenn Sie ein Windows-Benutzer sind, können Sie die Binärdatei von dieser Seite herunterladen. Stellen Sie sicher, dass Sie den Binärpfad in die Umgebungsvariable PATH aufnehmen. Eine andere Möglichkeit ist die Verwendung von WSL (Windows Subsystem for Linux). Lesen Sie mehr darüber hier.
  • Wenn Sie ein Mac-Benutzer sind, installieren Sie wget mit brew

Vergessen Sie nicht, die ausführliche Dokumentation von wget hier zu lesen.

Installation von Python

Holen Sie sich die neueste Version von Python von der offiziellen Website und folgen Sie den Installationsanweisungen für Ihre Plattform. Nach der Installation können Sie die Version mit diesem Befehl überprüfen:

python3 --version

Ausführen von Systembefehlen in Python

Mit dem Modul `subprocess` in Python können Sie Systembefehle ausführen und deren Ausgabe aufzeichnen. Es ist ein leistungsfähiger und flexibler Weg, um aus Ihren Python-Skripten heraus mit dem Betriebssystem zu interagieren.

Um das Modul "subprocess" zu verwenden, müssen Sie es zunächst in Ihr Python-Skript importieren. Dann können Sie die Funktion "subprocess.run()" verwenden, um einen Systembefehl auszuführen und seine Ausgabe zu erfassen.

Die Funktion `run()` nimmt den auszuführenden Befehl als Zeichenkette entgegen und gibt ein `CompletedProcess`-Objekt zurück, das den Exit-Code, stdout und stderr des Befehls enthält.

Hier ist ein Beispiel für die Verwendung der Funktion `subprocess.run()` zur Ausführung des Befehls ls, der die Dateien in einem Verzeichnis auflistet:

import subprocess

result = subprocess.run(['ls', '-l'])

print(result.stdout)

Führen Sie diesen Code mit dem Befehl python3 main.py aus. Das Ergebnis sollte wie folgt aussehen.

insgesamt 4

-rw-r--r-- 1 dan dan 80 6. Jan. 18:58 main.py

Keine

Herunterladen mit wget

Eine Datei herunterladen

Beginnen wir mit dem Herunterladen des WebScrapingAPI-Logos. Ersetzen Sie die Liste der Argumente durch `wget` und die URL des Logos. Der Befehl sieht dann wie folgt aus:

Ergebnis = subprocess.run(['wget', 'https://www.webscrapingapi.com/images/logo/logo-white.svg'])

Das Skript liefert die folgende Ausgabe:

--06.01.2023 19:06:32--  https://www.webscrapingapi.com/images/logo/logo-white.svg

Auflösung von www.webscrapingapi.com (www.webscrapingapi.com)... 76.76.21.61, 76.76.21.98

Verbindung zu www.webscrapingapi.com (www.webscrapingapi.com)|76.76.21.61|:443... hergestellt.

HTTP-Anfrage gesendet, warte auf Antwort... 200 OK

Länge: 5391 (5,3 KB) [image/svg+xml]

Speichern unter: 'logo-white.svg'

logo-white.svg                                                       100 %[====================================================================================================================================================================>]   5,26 KB  --.-KB/s    in 0,06 s   

06.01.2023 19:06:33 (91,6 KB/s) – „logo-white.svg“ gespeichert [5391/5391]

Keine

Anhand der Ausgabe können wir sehen, wie `wget` den Domänennamen auflöst, eine Verbindung zur Domäne herstellt, einen "200 OK"-Antwortcode empfängt, die Dateilänge (5,3k) feststellt und beginnt, die Datei lokal unter dem Namen "logo-white.svg" zu speichern.

Sie können im Projektordner nach der Datei `logo-white.svg` suchen.

Herunterladen in ein Verzeichnis

Sie können die Datei in ein benutzerdefiniertes Verzeichnis herunterladen, indem Sie das Flag "P" verwenden. Aktualisieren wir das Skript und führen wir es aus, um die Ergebnisse zu sehen:

Ergebnis = subprocess.run(['wget', '-P', 'images', 'https://www.webscrapingapi.com/images/logo/logo-white.svg'])

Die Ausgabe ist fast die gleiche, mit dem einzigen Unterschied, dass die Datei im Verzeichnis `./images/` gespeichert ist.

Einstellung des Namens der heruntergeladenen Datei

Mit dem Flag `-O` können Sie einen neuen Namen für die heruntergeladene Datei angeben. Versuchen wir es mal:

Ergebnis = subprocess.run(['wget', '-O', 'named-logo.svg', 'https://www.webscrapingapi.com/images/logo/logo-white.svg'])

Suchen Sie im Projektordner nach der Datei `named-logo.svg`.

Datei herunterladen, wenn die Remote-Version neuer ist

Sie können das Flag `-N` verwenden, um die entfernte Datei nur dann herunterzuladen, wenn die Version neuer ist als die der lokalen Datei. Der Befehl sieht dann wie folgt aus:

Ergebnis = subprocess.run(['wget', '-N', 'https://www.webscrapingapi.com/images/logo/logo-white.svg'])

Lebenslauf unterbrochene Downloads

Wenn ein Download unterbrochen wird, kann `wget` ihn an der Stelle fortsetzen, an der er unterbrochen wurde, um Zeit und Bandbreite zu sparen. Um dies zu tun, müssen Sie das Flag `-c` verwenden, das `wget` anweist, einen unterbrochenen Download fortzusetzen.

Der Befehl sieht dann wie folgt aus:

Ergebnis = subprocess.run(['wget', '-c', 'https://www.webscrapingapi.com/images/logo/logo-white.svg'])

Wenn der Dateidownload abgeschlossen wurde, sehen Sie in der Ausgabe die folgende Meldung:

HTTP-Anfrage gesendet, warte auf Antwort... 416 Requested Range Not Satisfiable

Die Datei wurde bereits vollständig abgerufen; es ist nichts zu tun.

Rekursiver Download

Wget kann zum Herunterladen einer ganzen Website oder eines Verzeichnisses verwendet werden, indem Links rekursiv verfolgt werden. Dazu müssen Sie die Flags `-r` und `-l` verwenden: Das Flag `-r` weist das Tool an, Links rekursiv zu folgen, und das Flag `-l` gibt die maximale Tiefe der Rekursion an.

Ergebnis = subprocess.run(['wget', '-r', '-l', '2', 'https://www.webscrapingapi.com'])

Dieser Befehl lädt die Website"https://www.webscrapingapi.com" herunter und verfolgt Links zu anderen Seiten derselben Website bis zu einer maximalen Tiefe von 2.

Wann ist wget nicht die Lösung?

Es gibt mehrere Situationen, in denen es sinnvoller ist, curl, Beautiful Soup oder Selenium anstelle von wget zu verwenden:

  • Wenn Sie HTTP-Header oder Cookies setzen müssen: Mit Curl können Sie HTTP-Header und Cookies setzen, was bei der Interaktion mit APIs oder beim Zugriff auf geschützte Websites nützlich sein kann. `wget` hat diese Fähigkeit nicht.
  • Wenn Sie Daten aus HTML parsen und extrahieren müssen: Beautiful Soup ist eine Python-Bibliothek, die das Parsen und Extrahieren von Daten aus HTML-Dokumenten erleichtert. wget ist nicht für das Parsen und Extrahieren von Daten aus Webseiten konzipiert.
  • Wenn Sie als Benutzer mit einer Website interagieren müssen: Selenium ist ein Tool, mit dem Sie den Prozess der Interaktion mit einer Website als Benutzer automatisieren können. Es kann zum Ausfüllen von Formularen, zum Anklicken von Schaltflächen und für andere Aktionen verwendet werden, die mit wget nicht möglich sind.

Schlussfolgerungen

Python und wget sind leistungsstarke Werkzeuge für die Automatisierung des Herunterladens von Dateien und Webseiten. Durch die Verwendung von wget mit Python können Sie Ihre Downloads anpassen, Web-Scraping oder Dateidownload-Aufgaben in Ihre bestehenden Python-Skripte integrieren und Zeit und Mühe sparen.

Es ist jedoch wichtig, dass Sie die Nutzungsbedingungen der Websites, von denen Sie herunterladen, respektieren und eine Überlastung der Server vermeiden.

Wenn Sie auf der Suche nach einer Alternative zu wget für Web Scraping sind, sollten Sie WebScrapingAPI verwenden. WebScrapingAPI ist ein professioneller Web-Scraping-Dienst, mit dem Sie ganz einfach Daten aus Websites extrahieren können, ohne einen eigenen Web-Scraper erstellen und pflegen zu müssen.

Es ist eine schnelle, zuverlässige und kostengünstige Lösung, die für Unternehmen jeder Größe geeignet ist.

Probieren Sie es noch heute aus!

Über den Autor
Suciu Dan, Mitbegründer von WebScrapingAPI
Suciu DanMitbegründer

Suciu Dan ist Mitbegründer von WebScrapingAPI und verfasst praxisorientierte, auf Entwickler zugeschnittene Anleitungen zu den Themen Web-Scraping mit Python, Web-Scraping mit Ruby und Proxy-Infrastruktur.

Los geht’s

Sind Sie bereit, Ihre Datenerfassung zu erweitern?

Schließen Sie sich den über 2.000 Unternehmen an, die WebScrapingAPI nutzen, um Webdaten im Unternehmensmaßstab ohne zusätzlichen Infrastrukturaufwand zu extrahieren.