3.3 Herunterladen der Inhalte der Website (I) - mkappus1/DatenmanagementMTHS24 GitHub Wiki
Herunterladen mit den MTUOC-Skripten
Sobald wir die Sitemap-Datei haben, können wir die Website herunterladen. Dieser Download besteht darin, die Links Zeile für Zeile herunterzuladen und sie während des Downloads zu analysieren, um zu sehen, ob neue interne Links auf der Website gefunden werden. Diese Links werden überprüft, um sicherzustellen, dass sie nicht bereits heruntergeladen wurden und nicht in der Sitemap enthalten sind. Ist dies nicht der Fall, werden sie der Liste der herunterzuladenden Links hinzugefügt.
Das Herunterladen einer Website kann sehr langsam sein und Stunden oder sogar Tage dauern. Das Programm lässt zufällige Zeiten ohne Download verstreichen, um zu verhindern, dass der Server der Website dies als eine Art Angriff erkennt und die IP-Adresse sperrt.
Um die Website herunterzuladen, verwenden wir das Programm MTUOC-download-from-sitemap.py. Dieses Programm verfügt über die Option -h, die die Hilfe anzeigt:
python3 MTUOC-download-from-sitemap.py -h
usage: MTUOC-download-from-sitemap.py [-h] -f SITEMAPFILE [-d OUTDIR] [-s STRATEGY] [-l LOGFILE] [-e EXCLUDE [EXCLUDE ...]] [--nofollow]
[--minwait MINWAIT] [--maxwait MAXWAIT] [--maxdownload MAXDOWLOAD] [--timeout TIMEOUT]
MTUOC program to get the links from a website.
options:
-h, --help show this help message and exit
-f SITEMAPFILE, --file SITEMAPFILE
The file containing the links to download (the sitemap).
-d OUTDIR, --directory OUTDIR
The directory where the downladed files will be stored. If not provided, "download" subdirectory will be used.
-s STRATEGY, --strategy STRATEGY
selenium (default) / requests.
-l LOGFILE, --log LOGFILE
The log file to write and load.
-e EXCLUDE [EXCLUDE ...], --exclude EXCLUDE [EXCLUDE ...]
List of file extensions to ignore
--nofollow Do not follow new links.
--minwait MINWAIT The minimum time to wait between downloads. Default 0.
--maxwait MAXWAIT The maximum time to wait between downloads. Default 2 seconds.
--maxdownload MAXDOWLOAD
The maximum number of webpages to download. Default 1,000,000.
--timeout TIMEOUT The timeout for Selenium. Default 10
Mit der Option -f
oder --file
geben wir die Datei an, die die Sitemap enthält, und mit -d
oder --directory
das Ausgabeverzeichnis, in das die Website heruntergeladen werden soll. Wenn kein Verzeichnis angegeben wird, wird sie in das Download-Verzeichnis heruntergeladen.
Mit der Option -l
oder -log
können Sie einen Namen für die Download-Logdatei angeben. Wenn Sie nichts angeben, erhält die Datei den Standardnamen downloadlo-, gefolgt von dem Namen der herunterzuladenden Website. Diese Logdatei ist nützlich, wie wir später noch sehen werden.
Die Option -s oder --strategy verdient besondere Aufmerksamkeit und weitere Erklärungen. Vor Jahren bestanden Websites aus einer Reihe von statischen HTML-Dateien in einem Verzeichnis. Wenn Sie die Adresse der Datei kannten, konnten Sie die Html-Datei herunterladen und sie enthielt alle Informationen. Mit der Strategie request konnten Sie also Html für Html herunterladen und den gesamten Inhalt abrufen. Es gibt immer noch solche Websites, aber in den vielen Fällen wird der Inhalt der Webseiten von Skripten generiert, die Datenbanken mit dem Inhalt oder Content Management Systeme usw. abfragen. Wenn Sie also die Html-Datei mit einer Strategie wie requests herunterladen, erhalten Sie eine Html-Datei, die das Skript enthält, das den Inhalt abfragt, aber nicht den Inhalt selbst. Um den Inhalt zu erhalten, müssen Sie ihn mit einem Webbrowser öffnen und darauf warten, dass das Skript den Inhalt abfragt und anzeigt. Sobald der Inhalt im Browser abgerufen wurde, kann diese Webseite mit dem Inhalt auf dem Computer gespeichert werden. Genau das tut die Selenium-Strategie: Sie öffnet einen Firefox-Browser (ohne sichtbar zu sein, d.h. sie öffnet nicht die grafische Oberfläche), lädt die Webseite und wartet darauf, dass der Inhalt "angezeigt" wird und speichert dann die Webseite mit dem Inhalt als html-Datei. Weitere Informationen zu Strategien für das Webscraping und potentielle Probleme im Zusammenhang mit WSL finde Sie im Exkurs - Selenium und andere Strategien für das Webscraping
Mit der Option --nofollow
können Sie verhindern, dass neben den in der Sitemap direkt angegebenen Dateien keine weiteren über Links in den angegebenen Dateien heruntergeladen werden. Das heisst es wird nur die liste in der Sitemap abgearbeitet und heruntergeladen. Ich empfehle dringen für die folgenden Aufgaben/Übungen diese Option zu verwenden, da oft nicht vorhersehbar ist, wie viele Links sich in den aufgeführten Dateien befinden und das Verfolgen der Links so zu einer Vervielfachung der herunterzuladenden Dateien (und der benötigten Zeit) führen können.
Wenn Sie mit Windows und WSL arbeiten, führt das Fehlen einer grafischen Oberfläche zu einer Menge Probleme bei der Ausführung des Downloads mit der Selenium-Strategie. Wenn Sie unter Linux auf einem Computer mit einer grafischen Oberfläche, unter Mac oder unter Windows mit CMD arbeiten, können Sie den folgenden Befehl problemlos ausführen, sobald alle Voraussetzungen installiert sind.
Hier wieder zunächst die Anleitung von Antoni Oliver zum Download der Seite medlineplus.gov.
Bitte lesen Sie diese Anleitung nur und führen Sie diese Befehle so NICHT aus, da der Prozess sehr lange dauern würde. Wir werden das Skript später mit weniger umfangreichen Websites testen.
Glücklicherweise kann die Website, die wir herunterladen möchten, mit der Anforderungsstrategie heruntergeladen werden, indem Sie Folgendes tun:
python3 MTUOC-download-from-sitemap.py -f sitemap-medlineplus_gov.txt -s requests
Probieren Sie diese Strategie jetzt aus, wenn Sie unter Windows mit WSL und Selenium arbeiten (dies ist die Standardstrategie, Sie müssen also keine Strategie angeben). Für die
`python3 MTUOC-download-from-sitemap.py -f sitemap-medlineplus_gov.txt`
Nach mehreren Stunden würde so die "ganze" Website heruntergeladen. Da dies sehr lange dauern kann, können Sie den Download nach einer Weile abbrechen. Wenn Sie das Ergebnis interessiert, können Sie es unter diesem Link abrufen: http://lpg.uoc.edu/seminarioTAN/semana_3/download.zip (Sollte der Download fehlschlagen, kopieren Sie den Link und fügen ihn in Ihren Browser ein)
Während das Programm herunterlädt, erstellt es eine Logdatei. Diese Datei ist sehr interessant, um aufgetretene Fehler zu analysieren, einen abgebrochenen Download wieder aufzunehmen usw. Sie können die Protokolldatei des medline-Downloads hier abrufen. Die Datei hat die folgende Struktur.
SUCCESS https://medlineplus.gov/organizations/all_organizations.html download/medlineplus.gov/organizations/all_organizations.html selenium
ERROR https://medlineplus.gov/ency/anatomyvideos/000050.htm download/medlineplus.gov/ency/anatomyvideos/000050.htm selenium <class 'selenium.common.exceptions.TimeoutException'>
Wir können zählen, wie viele Fehler aufgetreten sind, indem wir tun:
grep "^ERROR" logdescargamedline.txt | wc -l
26
Wenn wir beim erneuten Herunterladen einer Website eine vorhandene Logdatei angeben, werden die in der Logdatei enthaltenen Informationen auf folgende Weise verwendet:
- Links, deren Protokollzeile mit SUCCESS beginnt, werden nicht erneut heruntergeladen.
- Links, deren Protokollzeile mit ERROR beginnt, werden erneut zum Download angeboten.
Nun können Sie das Skript selbst mit einigen der in den vorherigen Aufgaben/Übungen erstellten Linklisten testen.
Aufgabe 4:
- Laden Sie die Inhalte der Webseiten herunter, die in der Sitemap des IUED (englisch + Deutsch oder Italienisch) enthalten sind.
💡 WICHTIG: Verwenden Sie die Option --nofollow
um den Umfang des Downloads im Rahmen zu halten.
Wechseln Sie in das Verzeichnis www.zhaw.ch. Zippen Sie den gesamten Ordnerinhalt in eine ZIP Datei (z.B. mit dem Befehl zip -r archive.zip .
- wobei archive.zip der Name der zu erstellenden ZIP Datei ist und der Punkt .
am Ende Teil des Befehls ist. Geben Sie die Zipdatei unter Abgabe Aufgabe 4 auf Moodle ab.
Weiter zum Abschnitt 3.4 Herunterladen der Inhalte der Website(II) - Trafilatura