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.
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 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:
pip install bs4 Anfragen
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.
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.
Hier erfahren Sie, wie Sie Bilder über Requests herunterladen können:
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.
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:
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.
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 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.
pip install scrapy
scrapy startproject image_scraper
cd image_scraper
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.
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.
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.
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.
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.
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.
Eine crontab-Datei besteht aus Befehlszeilen, wobei jede Zeile einen eigenen Auftrag darstellt. Die Syntax lautet wie folgt:
MIN STUNDE DOM MON DOW CMD
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
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!