Schritt-für-Schritt-Anleitung: Wie man Bilder mit Python scrapen kann

Leitfäden, How to's, Kratzen, Sep-05-20245 Min. gelesen

In diesem Blogbeitrag führen wir Sie durch den Prozess des Scrapens von Bildern aus Websites mit Python. Sie erfahren, wie Sie mit gängigen Bibliotheken beginnen, mögliche Fallstricke umgehen und sogar fortgeschrittene Techniken erforschen können, um Ihre Web-Scraping-Fähigkeiten auf die nächste Stufe zu heben.

Die Grundlagen des Scraping von Bildern mit Python

Um mit dem Scraping von Bildern mit Python zu beginnen, müssen Sie sich mit einigen wichtigen Bibliotheken vertraut machen, die Ihnen diese Aufgabe erleichtern. Die beliebtesten Bibliotheken sind BeautifulSoup, Scrapy und Requests.

BeautifulSoup zum Extrahieren von Bild-URLs

BeautifulSoup ist eine Python-Bibliothek, die zum Parsen von HTML- und XML-Dokumenten verwendet wird. Sie erstellt einen Parse-Baum aus Seitenquelltexten, der zur einfachen Extraktion von Daten verwendet werden kann.

Hier ist ein einfaches Beispiel, wie man mit BeautifulSoup Bild-URLs extrahiert:

Schritt 1: Installieren Sie BeautifulSoup und Requests:

 pip install bs4 Anfragen

Schritt 2: Extrahieren von Bild-URLs:

 Anfragen importieren 
 von bs4 importieren BeautifulSoup

 url = 'https://books.toscrape.com/'

 response = requests.get(url)

 soup = BeautifulSoup(response.text, 'html.parser')
 images = soup.find_all('img')

This code fetches the HTML content of the specified URL, parses it with BeautifulSoup, and then finds all the `<img>` tags, printing out their `src` attributes.

Herunterladen von Bildern mit Python

Sobald Sie die URLs der Bilder extrahiert haben, müssen Sie sie herunterladen. Die Requests-Bibliothek ist aufgrund ihrer Einfachheit und Benutzerfreundlichkeit perfekt für diese Aufgabe geeignet.

Verwenden von Anfragen zum Herunterladen von Bildern

Hier erfahren Sie, wie Sie Bilder über Requests herunterladen können:

Bild von URL herunterladen:

for ind, img in enumerate(images):
   img_data = requests.get(url+img['src']).content
   with open(f'image_{ind+1}.jpg', 'wb') as handler:
       handler.write(img_data)

Dieses Skript sendet eine GET-Anfrage an die Bild-URL und schreibt den binären Inhalt des Bildes in eine Datei.

Behandlung von Fehlern und Ausnahmen

Es ist wichtig, mit Fehlern und Ausnahmen umzugehen, um sicherzustellen, dass Ihr Skript auch dann reibungslos läuft, wenn Probleme auftreten. Hier ist eine verbesserte Version des vorherigen Skripts:

Fehlerbehandlung:

for ind, img in enumerate(images):
   try:
       img_data = requests.get(url+img['src']).content
       with open(f'image_{ind+1}.jpg', 'wb') as handler:
           handler.write(img_data)
   except Exception as e:
       print(f"An error occurred during the extraction of image \n Image Url: {img['src']} \n Error: {e}")

Dieser Codeschnipsel enthält einen Try-Except-Block, um Fehler abzufangen, die während des Herunterladens auftreten könnten.

Fortgeschrittene Techniken für Image Scraping

Für komplexere Scraping-Aufgaben, wie z. B. das Scraping mehrerer Seiten oder ganzer Websites, ist Scrapy eine leistungsstarke Bibliothek, die diese Szenarien effizient bewältigen kann.

Scrapy für komplexe Aufgaben verwenden

Scrapy ist ein quelloffenes und kollaboratives Web-Crawling-Framework für Python. Es ist auf Geschwindigkeit und Effizienz ausgelegt und damit ideal für umfangreiche Scraping-Projekte.

Schritt 1: Installieren Sie Scrapy:

 pip install scrapy

Schritt 2: Erstellen Sie ein Scrapy-Projekt:

 scrapy startproject image_scraper
 cd image_scraper

Schritt 3: Definieren Sie einen Spider:

Erstellen Sie eine Spider-Datei (`spiders/image_spider.py`) mit dem folgenden Inhalt:

import scrapy
class ImageSpider(scrapy.Spider):
   name = 'imagespider'
   start_urls = ['https://books.toscrape.com/']
   def parse(self, response):
       # Extract image URLs and convert them to absolute if necessary
       for img in response.css('img::attr(src)').getall():
           abs_img_url = response.urljoin(img)
           yield {'image_url': abs_img_url}
      
       # Find the link to the next page and create a request for it
       next_page = response.css('a.next::attr(href)').get()
       if next_page is not None:
           next_page_url = response.urljoin(next_page)
           yield response.follow(next_page_url, self.parse)

Dieser einfache Scrapy-Spider startet bei der angegebenen URL, extrahiert alle Bild-URLs und folgt den Links zur nächsten Seite, um das Scraping fortzusetzen.

Verbessern Sie Ihre Image Scraping Projekte

Um Ihre Scraping-Projekte weiter zu verbessern, sollten Sie den Einsatz von APIs für den Zugriff auf hochwertige Bilder und die Automatisierung Ihrer Aufgaben in Betracht ziehen.

Verwendung von APIs für Image Scraping

APIs bieten eine zuverlässige und legale Möglichkeit, auf Bilder zuzugreifen. Viele Websites bieten APIs an, mit denen Sie programmgesteuert Bilder suchen und herunterladen können. Eine dieser Websites ist Unsplash API.

Beispiel mit Unsplash API:

import requests
# Replace 'YOUR_ACCESS_KEY' with your actual Unsplash Access Key
api_url = "https://api.unsplash.com/photos/random"
headers = {"Authorization": "Client-ID YOUR_ACCESS_KEY"}
params = {"query": "nature"}
try:
   response = requests.get(api_url, headers=headers, params=params)
   response.raise_for_status()  # This will raise an exception for HTTP errors
   data = response.json()
   image_url = data['urls']['full']
   print(image_url)
except requests.exceptions.HTTPError as err:
   print(f"HTTP error occurred: {err}")
except Exception as err:
   print(f"An error occurred: {err}")

Dieses Skript verwendet die Unsplash-API, um ein zufälliges Naturbild abzurufen.

Automatisieren von Image Scraping-Aufgaben

Automatisierung spart Zeit und sorgt dafür, dass Ihre Scraping-Aufgaben reibungslos und ohne manuelle Eingriffe ablaufen. Tools wie Cron-Jobs auf Unix-Systemen oder Task Scheduler auf Windows können Ihre Skripte so planen, dass sie in regelmäßigen Abständen ausgeführt werden.

Cron-Jobs auf Unix-Systemen - Crontab:

Crontab ist ein leistungsfähiges Dienstprogramm in Unix-ähnlichen Betriebssystemen zur Planung von Aufgaben, den so genannten"Cron-Jobs", die automatisch zu bestimmten Zeiten ausgeführt werden. Sehen wir uns an, wie wir eine Aufgabe mit Crontab planen können.

Verstehen der Crontab-Syntax:

Eine crontab-Datei besteht aus Befehlszeilen, wobei jede Zeile einen eigenen Auftrag darstellt. Die Syntax lautet wie folgt:

MIN STUNDE DOM MON DOW CMD
  • MIN: Minutenfeld (0 bis 59)
  • HOUR: Stundenfeld (0 bis 23)
  • DOM: Tag des Monats (1 bis 31)
  • MON: Monatsfeld (1 bis 12)
  • DOW: Wochentag (0 bis 7, wobei 0 und 7 für Sonntag stehen)
  • CMD: Der auszuführende Befehl (in diesem Fall ist es die ausführbare Datei Ihres Python-Skripts)

Hier ist ein Beispiel für die Ausführung eines Python-Skripts täglich um 8:00PM

0 20 * * * /usr/bin/python3/path/to/Image_Scraper.py

Verwendung des Task-Planers (Windows):

  • Öffnen Sie den Taskplaner (Verwenden Sie die Suchleiste von Windows und suchen Sie nach "Taskplaner")
  • Klicken Sie auf"Basisaufgabe erstellen".
  • Geben Sie einen Namen und eine Beschreibung ein und klicken Sie auf"Weiter".
  • Wählen Sie die Granularität oder das Intervall, in dem Sie diese Aufgabe ausführen möchten, und klicken Sie auf"Weiter".
  • Vergewissern Sie sich, dass"Ein Programm starten" aktiviert ist und klicken Sie auf"Weiter".
  • Geben Sie den Pfad zu Ihrem Python-Skript an, indem Sie auf"Durchsuchen" klicken. Wenn Sie Argumente für Ihr Python-Skript angeben müssen, können Sie dies in den Feldern"Argumente hinzufügen" tun und auf"Weiter" klicken.
  • Als letzten Schritt klicken Sie einfach auf"Fertig stellen", und schon ist diese Aufgabe bereit, im angegebenen Intervall ausgeführt zu werden.

Schlussfolgerung

In diesem Blogbeitrag haben wir uns damit beschäftigt, wie man mit Python Bilder von Websites scrapen kann. Wir haben die Grundlagen mit BeautifulSoup und Requests, erweiterte Techniken mit Scrapy und ethische Scraping-Praktiken behandelt. Außerdem haben wir besprochen, wie Sie Ihre Scraping-Projekte mit APIs und Automatisierungstools wie Windows Task Scheduler verbessern können.

Image Scraping ist eine leistungsstarke Fähigkeit, die Ihre Datenerfassungsfähigkeiten verbessern und neue Möglichkeiten für Ihre Projekte eröffnen kann.

Viel Spaß beim Scrapen!