HTML Code mit Python herunterladen und abspeichern

Mit diesem Beispiel soll aufgezeigt werden, wie Bilder aus einer Webseite automatisiert heruntergeladen werden können und anschliessend in einem gewünschten Ordner gespeichert werden.

Bibliothek Requests verwenden: https://requests.readthedocs.io/en/master/


Webseiten ohne SSL Verschlüsselung

Variable für die zu bearbeitende URL erstellen:
url = "http://python.vic-tim.de/images/"


Erstellen eines Ordners. Zudem soll verhindert werden, dass wenn der Ordner bereits besteht, dieser nochmals erstellt wird. (Was zu einem Fehler führen würde.)
import os
if not os.path.exists("./bilder"):
os.mkdir("./bilder")

Quellcode der Seite herunterladen und nach den Bildern suchen. Die gefundenen Bilder werden in der Variable images gespeichert.
import requests
response = requests.get(url)

if response.status_code == 200:
doc = BeautifulSoup(response.text, "html.parser")
images = doc.find_all("img")

Nun soll der Dateipfad auf das Bild heruntergeladen und in einer Variable vom Typ Liste abgespeichert werden.
for img in images:
path = urllib.parse.urljoin(url, img.attrs["src"])
found_images.append(path)

Die Bilder müssen nun als Dateien auf der Festplatte gespeichert werden. Um den Dateinamen für das Speichern zusammen setzen zu können, wird als erstes der Dateiname des Bildes benötigt. Dazu wird der Letzte Eintrag des Listenelements verwendet [-1]. Der Dateiname bzw. das Bild wird nun im gewünschten Ordner abgelegt.
for found_image in found_images:
filename = found_image.split("/")[-1]
response = requests.get(found_image)
with open("./bilder/"+ filename, "wb") as file:
file.write(response.content)


Nun das gesamte Skript um die Bilder aus der Webseite herunter zu laden un in einem Ordner „bilder" abzuspeichern
import requests
import urllib
import os
from bs4 import BeautifulSoup
url = "http://python.vic-tim.de/images/"
response = requests.get(url)
found_images = []
if not os.path.exists("./bilder"):
os.mkdir("./bilder")
if response.status_code == 200:
doc = BeautifulSoup(response.text, "html.parser")
images = doc.find_all("img")
for img in images:
path = urllib.parse.urljoin(url, img.attrs["src"])
found_images.append(path)
for found_image in found_images:
filename = found_image.split("/")[-1]
response = requests.get(found_image)
with open("./bilder/"+ filename, "wb") as file:
file.write(response.content)