Zurück zum Blog
Anleitungen
Gabriel CiociLast updated on Mar 31, 20267 min read

Webseiten und Dateien mühelos mit Python und wget herunterladen

Webseiten und Dateien mühelos mit Python und wget herunterladen

Hast du es satt, Webseiten und Dateien manuell herunterzuladen? Wünschst du dir, es gäbe einen einfacheren Weg, an die benötigten Daten zu kommen? Dann bist du hier genau richtig! In diesem Artikel zeige ich dir, wie du mit Python und dem Befehlszeilentool wget diesen Vorgang automatisieren kannst.

In diesem Artikel erfahren Sie, wie Sie Python und wget nutzen können, um das Herunterladen aus dem Internet zu automatisieren, und lernen gleichzeitig die Möglichkeiten und Grenzen von wget sowie alternative Tools für das Web-Scraping kennen.

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 an 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, weit verbreitet. 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:

  • Dateien aus dem Internet herunterladen: Mit Wget können Sie Dateien aus dem Internet herunterladen, darunter Webseiten, Bilder und andere Dateitypen.
  • Anpassbare Download-Optionen: Mit Wget können Sie verschiedene Optionen festlegen, um Ihre Downloads anzupassen, 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 abgebrochen wurde, was Zeit und Bandbreite spart.
  • Rekursives Herunterladen: Mit wget kann eine gesamte Website oder ein Verzeichnis heruntergeladen werden, indem Links rekursiv verfolgt werden.
  • Unterstützung für HTTP, HTTPS und FTP: Wget kann verschiedene Arten von Internetprotokollen verarbeiten, darunter HTTP, HTTPS und FTP, was es zu einem vielseitigen Tool für das Herunterladen von verschiedenen Servertypen macht.
  • Verfügbar auf den meisten Unix-ähnlichen Systemen: Wget ist auf den meisten Unix-ähnlichen Systemen, einschließlich Linux und macOS, weit verbreitet, was die Verwendung auf einer Vielzahl von Plattformen erleichtert.

Warum wget mit Python verwenden?

Python und wget lassen sich kombinieren, um das Herunterladen von Webseiten und Dateien zu automatisieren, was Zeit und Aufwand spart. Wget kann über Python angepasst werden, und Aufgaben wie Web-Scraping oder das Herunterladen von Dateien lassen sich in bestehende Python-Skripte integrieren.

Es gibt mehrere Gründe, warum man sich für die Verwendung von wget mit Python entscheiden könnte:

  • 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 Aufwand sparen, insbesondere wenn Sie eine große Anzahl von Dateien oder Websites herunterladen müssen.
  • Anpassung: Mit Wget können Sie verschiedene Optionen festlegen, um Ihre Downloads anzupassen, wie z. B. das Verzeichnis, in dem die Datei gespeichert werden soll, den Dateinamen und ob vorhandene Dateien überschrieben werden sollen. Durch die Verwendung von Wget mit Python können Sie diese Optionen programmgesteuert festlegen und Ihre Downloads an Ihre Bedürfnisse 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 Datei-Download-Aufgaben zu vereinfachen.
  • Skalierbarkeit: Python ist eine skalierbare Sprache, die große Datenmengen verarbeiten kann. Durch die Verwendung von wget mit Python können Sie Ihre Web-Scraping- oder Datei-Download-Aufgaben skalieren, um größere Datensätze zu verarbeiten.

Erste Schritte

Nachdem wir nun die einzelnen und kombinierten Vorteile von Python und wget besprochen haben, kommen wir zum Teil des Programmierens.

Installation von wget

Stellen Sie sicher, dass wget auf Ihrem Computer installiert ist. Wenn Sie Linux als Betriebssystem verwenden, ist es bereits installiert.

  • Wenn Sie Windows-Nutzer sind, können Sie die Binärdatei von dieser Seite herunterladen. Stellen Sie sicher, dass Sie den Pfad zur Binärdatei zur Umgebungsvariable PATH hinzufügen. Eine weitere Option ist die Verwendung von WSL (Windows Subsystem for Linux). Lesen Sie hier mehr darüber.
  • Wenn Sie Mac-Nutzer sind, installieren Sie wget mit brew

Vergessen Sie nicht, die umfangreiche Dokumentation zu wget hier zu lesen.

Python installieren

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

python3 --version

Systembefehle in Python ausführen

Das `subprocess`-Modul in Python ermöglicht es Ihnen, Systembefehle auszuführen und deren Ausgabe zu erfassen. Es ist eine leistungsstarke und flexible Möglichkeit, aus Ihren Python-Skripten heraus mit dem Betriebssystem zu interagieren.

Um das `subprocess`-Modul zu verwenden, müssen Sie es zunächst in Ihr Python-Skript importieren. Anschließend können Sie die Funktion `subprocess.run()` verwenden, um einen Systembefehl auszuführen und dessen 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()`, um den Befehl `ls` auszuführen, 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.

total 4

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

None

Herunterladen mit wget

Eine Datei herunterladen

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

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

Das Skript gibt die folgende Ausgabe zurück:

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

Resolving www.webscrapingapi.com (www.webscrapingapi.com)... 76.76.21.61, 76.76.21.98

Connecting to www.webscrapingapi.com (www.webscrapingapi.com)|76.76.21.61|:443... connected.

HTTP request sent, awaiting response... 200 OK

Length: 5391 (5.3K) [image/svg+xml]

Saving to: 'logo-white.svg'

logo-white.svg 100%[====================================================================================================================================================================>] 5.26K --.-KB/s in 0.06s

2023-01-06 19:06:33 (91.6 KB/s) - 'logo-white.svg' saved [5391/5391]

None

Aus der Ausgabe können wir ersehen, wie `wget` den Domainnamen auflöst, eine Verbindung zur Domain herstellt, den Antwortcode `200 OK` erhält, die Dateilänge (5,3 kB) ermittelt und die Datei lokal unter dem Namen `logo-white.svg` speichert.

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

In ein Verzeichnis herunterladen

Sie können die Datei mithilfe des `-P`-Flags in ein benutzerdefiniertes Verzeichnis herunterladen. Aktualisieren wir das Skript und führen es aus, um die Ergebnisse zu sehen:

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

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

Festlegen des Dateinamens für die heruntergeladene Datei

Mit dem Flag `-O` können Sie einen neuen Namen für die heruntergeladene Datei festlegen. Probieren wir es aus:

result = 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

Mit dem Flag `-N` kannst du die Remote-Datei nur dann herunterladen, wenn die Version neuer ist als die lokale Datei. Der Befehl sieht dann so aus:

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

Unterbrochene Downloads fortsetzen

Wenn ein Download unterbrochen wird, kann `wget` ihn an der Stelle fortsetzen, an der er abgebrochen wurde, was Zeit und Bandbreite spart. Dazu müssen Sie das Flag `-c` verwenden, das `wget` anweist, einen unterbrochenen Download fortzusetzen.

Der Befehl sieht dann wie folgt aus:

result = 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 request sent, awaiting response... 416 Requested Range Not Satisfiable

The file is already fully retrieved; nothing to do.

Rekursiver Download

Mit `wget` kann eine gesamte Website oder ein Verzeichnis heruntergeladen 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 verfolgen, und das Flag `-l` gibt die maximale Tiefe der Rekursion an.

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

Dieser Befehl lädt die Website unter „https://www.webscrapingapi.com“ herunter und folgt den Links zu anderen Seiten derselben Website bis zu einer maximalen Tiefe von 2.

Wann ist wget nicht die richtige Lösung?

Es gibt mehrere Situationen, in denen es sinnvoller sein könnte, 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` verfügt nicht über diese Fähigkeit.
  • 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 vereinfacht. wget ist nicht für das Parsen und Extrahieren von Daten aus Webseiten ausgelegt.
  • 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 Klicken auf Schaltflächen und zur Ausführung anderer Aktionen verwendet werden, die mit wget nicht möglich sind.

Fazit

Python und wget sind leistungsstarke Werkzeuge zur Automatisierung des Herunterladens von Dateien und Webseiten. Durch die Verwendung von wget mit Python können Sie Ihre Downloads anpassen, Web-Scraping- oder Datei-Download-Aufgaben in Ihre bestehenden Python-Skripte integrieren und Zeit und Aufwand sparen.

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

Wenn Sie nach einer Alternative zu wget für das Web-Scraping suchen, sollten Sie die Verwendung von WebScrapingAPI in Betracht ziehen. WebScrapingAPI ist ein professioneller Web-Scraping-Dienst, mit dem Sie ganz einfach Daten von Websites extrahieren können, ohne einen eigenen Web-Scraper erstellen und warten 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
Gabriel Cioci, Full-Stack-Entwickler @ WebScrapingAPI
Gabriel CiociFull-Stack-Entwickler

Gabriel Cioci ist Full-Stack-Entwickler bei WebScrapingAPI und verantwortlich für die Entwicklung und Wartung der Websites, des Benutzerportals sowie der wichtigsten benutzerseitigen Komponenten der Plattform.

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.