Ein Python-Image-Scraper ist nicht nur ein Werkzeug zum Schärfen Ihrer Programmierkenntnisse. Sie können es auch verwenden, um Bilder für ein maschinelles Lernprojekt zu beschaffen oder Website-Miniaturansichten zu generieren. Es gibt zwar andere Möglichkeiten, ähnliche Dinge zu tun, aber nichts kann die Kontrolle übertreffen, die Sie mit selbst erstellten Tools haben.
Erfahren Sie, wie Sie mit Python und der BeautifulSoup-Bibliothek Bilder von beliebigen Websites entfernen.
Ist Image Scraping legal?
Wie allgemeineres Web Scraping, Image Scraping ist eine Methode zum Herunterladen von Website-Inhalten. Es ist nicht illegal, aber es gibt einige Regeln und Best Practices, die Sie befolgen sollten. Erstens sollten Sie es vermeiden, eine Website zu scrapen, wenn sie ausdrücklich darauf hinweist, dass Sie dies nicht möchten. Sie können dies herausfinden, indem Sie nach a suchen /robots.txt Datei auf der Zielseite.
Die meisten Websites erlauben Web-Crawling, weil sie möchten, dass Suchmaschinen ihre Inhalte indexieren. Sie können solche Websites schaben, da ihre Bilder öffentlich verfügbar sind.
Nur weil Sie ein Bild herunterladen können, bedeutet das jedoch nicht, dass Sie es verwenden können, als wäre es Ihr eigenes. Die meisten Websites lizenzieren ihre Bilder, um zu verhindern, dass Sie sie erneut veröffentlichen oder auf andere Weise wiederverwenden. Gehen Sie immer davon aus, dass Sie Bilder nicht wiederverwenden können, es sei denn, es gibt eine spezielle Ausnahme.
Python-Paket einrichten
Sie müssen einige Pakete installieren, bevor Sie beginnen. Wenn Sie Python nicht auf Ihrem Computer installiert haben, besuchen Sie die offizielle python.org Website, um die neueste Version herunterzuladen und zu installieren.
Als nächstes öffnen Sie Ihr Terminal zu Ihrem Projektordner und Aktivieren Sie eine virtuelle Python-Umgebung um Ihre Abhängigkeiten zu isolieren.
Installieren Sie zum Schluss die Anfragen und Schöne Suppe Pakete mit Pip:
pip install bs4-Anforderungen
Image Scraping mit Python
Für dieses Image-Scraping-Tutorial verwenden Sie die Anfragen Bibliothek, um eine Webseite mit den Zielbildern abzurufen. Anschließend leiten Sie die Antwort von dieser Website weiter Schöne Suppe um alle Bildlinkadressen abzurufen Bild Stichworte. Anschließend schreiben Sie jede Bilddatei in einen Ordner, um die Bilder herunterzuladen.
So rufen Sie Bild-URLs mit Pythons BeautifulSoup ab
Machen Sie jetzt weiter und erstellen Sie eine Python-Datei in Ihrem Projektstammordner. Stellen Sie sicher, dass Sie die anhängen .py Erweiterung des Dateinamens.
Jedes Code-Snippet in diesem Tutorial setzt das vorherige fort.
Öffnen Sie die Python-Datei mit jeder gute Code-Editor und verwenden Sie den folgenden Code, um eine Webseite anzufordern:
importieren Anfragen
URL = "imagesiteURL" # Ersetzen Sie dies durch die URL der Website
getURL = request.get (URL, headers={"User-Agent":"Mozilla/5.0"})
drucken (getURL.status_code)
Wenn das obige Programm einen 200-Antwortcode ausgibt, war die Anfrage erfolgreich. Andernfalls sollten Sie sicherstellen, dass Ihre Netzwerkverbindung stabil ist. Stellen Sie außerdem sicher, dass Sie eine gültige URL angegeben haben.
Jetzt benutzen Schöne Suppe den Inhalt der Webseite mit Hilfe von zu lesen html_parser:
aus bs4 importieren Schöne Suppe
Suppe = BeautifulSoup (getURL.text, 'html.parser')
Bilder = Suppe.find_all('img')
drucken (Bilder)
Dieser Code erstellt eine Liste von Objekten, die jeweils ein Bild von der Webseite darstellen. Was Sie jedoch von diesen Daten benötigen, ist der Text jedes Bildes Quelle Attribut.
Um die Quelle von jedem zu extrahieren Bild Schild:
Bildquellen = []
zum Bild in Bilder:
imageSources.append (image.get('src'))
drucken (Bildquellen)
Führen Sie Ihren Code erneut aus, und die Bildadressen sollten jetzt in einer neuen Liste erscheinen (Bildquellen). Sie haben jede Bildquelle erfolgreich von der Zielwebseite extrahiert.
So speichern Sie die Bilder mit Python
Erstellen Sie zunächst einen Download-Zielordner in Ihrem Projektstammverzeichnis und benennen Sie ihn Bilder.
Damit Python die Bilder erfolgreich herunterladen kann, müssen ihre Pfade vollständige absolute URLs sein. Mit anderen Worten, sie müssen den " http://" oder " https://" Präfix, plus die vollständige Domain der Website. Wenn die Webseite ihre Bilder mit relativen URLs referenziert, müssen Sie sie in absolute URLs umwandeln.
Im einfachen Fall, wenn die URL absolut ist, besteht das Einleiten des Downloads lediglich darin, jedes Bild aus den zuvor extrahierten Quellen anzufordern:
zum Bild in Bildquellen:
webs = Anfragen.get (Bild)
open('images/' + image.split('/')[-1], 'wb').write (webs.content)
Das image.split('/')[-1] Schlüsselwort teilt den Bildlink bei jedem Schrägstrich (/). Dann ruft es den Bilddateinamen (einschließlich aller Erweiterungen) aus dem letzten Element ab.
Denken Sie daran, dass in seltenen Fällen Bilddateinamen kollidieren können, was zu Überschreibungen beim Download führt. Fühlen Sie sich frei, Lösungen für dieses Problem als Erweiterung zu diesem Beispiel zu untersuchen.
Absolute URLs können ziemlich kompliziert werden, da es viele Randfälle zu behandeln gilt. Glücklicherweise gibt es eine nützliche Methode in der Anfragen.compat Paket aufgerufen URL beitreten. Diese Methode gibt eine vollständige URL zurück, wenn eine Basis-URL und eine URL, die relativ sein kann, gegeben sind. Es ermöglicht Ihnen, Werte aufzulösen, die Sie in finden href und Quelle Attribute.
Der endgültige Code sieht so aus:
aus bs4 importieren Schöne Suppe
URL = "imagesiteURL" # Ersetzen Sie dies durch die URL der Website
getURL = request.get (URL, headers={"User-Agent":"Mozilla/5.0"})
Suppe = BeautifulSoup (getURL.text, 'html.parser')Bilder = Suppe.find_all('img')
aufgelösteURLs = []zum Bild in Bilder:
src = image.get('src')
aufgelösteURLs.append (requests.compat.urljoin (URL, src))
zum Bild in aufgelösteURLs:
webs = Anfragen.get (Bild)
open('images/' + image.split('/')[-1], 'wb').write (webs.content)
Niemals an Bilddaten mangeln
Viele Bilderkennungsprojekte scheitern an der unzureichenden Menge an Bildern, um ein Modell zu trainieren. Sie können jedoch jederzeit Bilder von Websites entfernen, um Ihr Datenrepository zu erweitern. Und zum Glück ist Python ein leistungsstarker Image-Scraper, den Sie kontinuierlich verwenden können, ohne befürchten zu müssen, dass der Preis zu hoch wird.
Wenn Sie daran interessiert sind, andere Arten von Daten aus dem Internet abzurufen, möchten Sie vielleicht herausfinden, wie Sie Python für allgemeines Web-Scraping verwenden.