DeviantArt ist die größte soziale Plattform für digitale Künstler und Kunstfans. Mit über 60 Millionen Mitgliedern, die täglich Zehntausende Kunstwerke teilen, ist es ein Top-Spot zum Entdecken und Herunterladen vielfältiger Kreationen, von digitalen Gemälden bis hin zu Hintergrundbildern, Pixelkunst, Anime und Filmschnappschüssen.

Das manuelle Sammeln von Tausenden von Datenpunkten von Websites kann jedoch sehr zeitaufwändig sein. Anstatt Informationen manuell zu kopieren, automatisieren wir den Prozess mithilfe von Programmiersprachen wie Python.

DeviantArt Digitale Kunst Vielfalt

Scraping DeviantArt gibt uns die Möglichkeit, verschiedene Kunststile zu betrachten, Trends zu erkennen und unsere Sammlung von Lieblingsbildern aufzubauen. Es geht nicht nur darum, Kunst zu genießen; wir können auch mehr darüber lernen.

In dieser Anleitung verwenden wir Python, eine benutzerfreundliche Programmiersprache. Und um uns beim Scraping zu helfen, haben wir die Crawlbase Crawling API – ein praktisches Tool, das das Abrufen von Daten aus dem Web erheblich vereinfacht. Zusammen mit Python Crawlbase Mit der API wird das Erkunden und Sammeln digitaler Kunst zum Kinderspiel.

Inhaltsverzeichnis

  1. DeviantArt-Website verstehen
  • DeviantArt-Suchseitenstruktur
  • Warum Bilder von DeviantArt scrapen?
  1. Einrichten Ihrer Umgebung
  • Installieren von Python und Bibliotheken
  • Erhalten Crawlbase API-Schlüssel
  • Auswählen der Entwicklungs-IDE
  1. Möglichkeiten sondieren Crawlbase Crawling API
  • Technische Vorteile von Crawlbase Crawling API
  • Anfrage senden mit Crawling API
  • API-Antwortzeit und -Format
  • Crawling API Kenngrößen
  • Kostenlose Testversion, Gebührenstrategie und Ratenbegrenzung
  • Crawlbase Python-Bibliothek
  1. Crawling DeviantArt-Suchseite
  • Importieren erforderlicher Bibliotheken
  • Erstellen der URL für die DeviantArt-Suche
  • API-Anfragen stellen mit Crawlbase Crawling API zum Abrufen von HTML
  • Ausführen Ihres Skripts
  1. Umgang mit Paginierung
  • Paginierung in DeviantArt verstehen
  • Ändern von API-Anfragen für mehrere Seiten
  • Sicherstellung einer effizienten Seitennummerierung
  1. Analysieren und Extrahieren von Bild-URLs
  • Untersuchen der DeviantArt-Suchseite auf CSS-Selektoren
  • Verwenden von CSS-Selektoren zum Extrahieren von Bild-URLs
  • Extrahierte Daten in CSV- und SQLite-Datenbank speichern
  1. Herunterladen von Bildern von extrahierten Bild-URLs
  • Verwenden von Python zum Herunterladen von Bildern
  • Heruntergeladene Bilder organisieren
  1. Zusammenfassung
  2. Häufig gestellte Fragen

DeviantArt-Website verstehen

DeviantArt ist eine lebendige und weitläufige Online-Community, die sowohl erfahrenen als auch aufstrebenden Künstlern als Zufluchtsort dient. DeviantArt wurde im Jahr 2000 gegründet und hat sich zu einer der größten Online-Kunst-Communitys mit Millionen von Benutzern und einer umfangreichen Sammlung unterschiedlicher Kunstwerke entwickelt.

Im Kern ist DeviantArt eine digitale Galerie, in der Künstler eine breite Palette von Kreationen ausstellen können, darunter digitale Gemälde, Illustrationen, Fotografien, Literatur und mehr. Die Plattform fördert die Interaktion durch Kommentare, Kritiken und die Erstellung gemeinsamer Projekte und schafft so ein dynamisches und unterstützendes Umfeld für kreative Köpfe.

DeviantArt-Suchseitenstruktur

Die Suchseite ist ein Tor zu einer Vielzahl von Kunstwerken und bietet Filter und Parameter, um die Suche nach bestimmten Themen, Stilen oder Künstlern zu verfeinern.

DeviantArt Digitale Kunst Vielfalt

Zu den Hauptkomponenten der DeviantArt-Suchseitenstruktur gehören:

  • Suchleiste: Der Einstiegspunkt für Benutzer zur Eingabe von Schlüsselwörtern, Tags oder Künstlernamen.
  • Filter: Optionen zum Eingrenzen der Suche basierend auf Kategorien, Typen und Popularität.
  • Ergebnisraster: Anzeige einer Tabelle mit Miniaturbildern von Kunstwerken, die den Suchkriterien entsprechen.
  • Paginierung: Navigation zum Durchlaufen mehrerer Seiten mit Suchergebnissen.

Warum Bilder von DeviantArt scrapen?

Menschen, darunter auch Forscher, scrapen Bilder aus verschiedenen Gründen. Erstens ermöglicht es Enthusiasten, auf DeviantArt verschiedene künstlerische Stile und Talente zu entdecken, was es zu einer spannenden Reise der künstlerischen Erkundung macht. Für Forscher und Analysten liefert das Scraping wertvolle Daten, um Trends und die Entwicklung der digitalen Kunst im Laufe der Zeit zu untersuchen. Künstler und Kunstliebhaber nutzen Scraping-Bilder auch als Inspirationsquelle und erstellen kuratierte Sammlungen, die die immense Kreativität innerhalb der DeviantArt-Community zeigen. Darüber hinaus hilft Scraping dabei, die Dynamik der Community zu verstehen, einschließlich beliebter Themen, Kollaborationstrends und der Auswirkungen verschiedener Kunststile. Im Wesentlichen ist das Scraping von DeviantArt eine Möglichkeit, die reiche Vielfalt des künstlerischen Ausdrucks auf der Plattform zu schätzen, daraus zu lernen und zu ihr beizutragen.

Einrichten Ihrer Umgebung

Stellen wir sicher, dass Ihre Umgebung für das Image Scraping von Deviantart bereit ist. Dieser Abschnitt führt Sie durch die Installation wichtiger Tools, einschließlich Python, und die Einrichtung der erforderlichen Bibliotheken. Crawlbase, BeautifulSoup und Pandas.

Installieren von Python und Bibliotheken

Python-Installation:

Beginnen Sie mit der Installation von Python, der Programmiersprache, die unser Scraping-Abenteuer vorantreibt. Besuchen Sie die offizielle Python-Website und laden Sie die neueste Version herunter, die für Ihr Betriebssystem geeignet ist. Folgen Sie den Installationsanweisungen, um Python auf Ihrem Computer einzurichten.

Erstellen Sie eine virtuelle Umgebung:

Um eine saubere und organisierte Entwicklungsumgebung aufrechtzuerhalten, sollten Sie eine virtuelle Umgebung für Ihr Projekt erstellen. Verwenden Sie die folgenden Befehle in Ihrem Terminal:

1
2
3
4
5
6
# Erstellen Sie eine virtuelle Umgebung
python -m venv meine Umgebung

# Aktivieren Sie die virtuelle Umgebung
Quelle myenv/bin/activate # Unter macOS/Linux
.\myenv\Scripts\activate # Unter Windows

Installation der Bibliothek:

Sobald Python installiert ist, öffnen Sie Ihr Terminal oder Ihre Eingabeaufforderung und installieren Sie die erforderlichen Bibliotheken mit den folgenden Befehlen:

1
2
3
4
pip installieren crawlbase
pip install beautifulsoup4
Pandas installieren
Pip Installationsanforderungen

Crawlbase: Der crawlbase Bibliothek ist ein Python-Wrapper für die Crawlbase API, die es uns ermöglicht, Webanforderungen effizient zu stellen.

Schöne Suppe: Beautiful Soup ist eine Bibliothek zum Parsen von HTML- und XML-Dokumenten. Sie ist besonders nützlich zum Extrahieren von Daten aus Webseiten.

Pandas: Pandas ist eine leistungsstarke Bibliothek zur Datenbearbeitung, die Ihnen hilft, die Scraped-Daten effizient zu organisieren und zu analysieren.

Produktanfragen: Der requests Die Bibliothek ist ein Python-Modul zum mühelosen Senden von HTTP-Anfragen und Verwalten von Antworten. Es vereinfacht allgemeine HTTP-Operationen und ist daher ein weit verbreitetes Tool für webbezogene Aufgaben wie Web Scraping und API-Interaktionen.

Erhalten Crawlbase API-Schlüssel

Melden Sie sich an für Crawlbase:

Navigieren Sie zu der Crawlbase Website und Registrieren für ein Konto, falls Sie noch keins haben. Sobald Sie registriert sind, melden Sie sich bei Ihrem Konto an.

Rufen Sie Ihren API-Schlüssel ab:

Gehen Sie nach dem Einloggen zu Ihrem Kontodokumentation on Crawlbase. Suchen Sie Ihren API-Schlüssel, der für die Interaktion mit dem Crawlbase Crawling API. Bewahren Sie diesen Schlüssel sicher auf, da er Ihr Tor zum Zugriff auf die gewünschten Webdaten ist.

Auswählen der Entwicklungs-IDE

Eine integrierte Entwicklungsumgebung (IDE) ist wie ein spezieller Bereich zum Schreiben von Code. Sie hilft, indem sie den Code hervorhebt, Wörter während der Eingabe vorschlägt und Tools zum Beheben von Fehlern bereitstellt. Obwohl Sie Python-Code in einem einfachen Texteditor schreiben können, macht die Verwendung einer IDE den Prozess viel einfacher und verbessert Ihre Entwicklungsarbeit.

Hier sind einige beliebte Python-IDEs, die Sie in Betracht ziehen sollten:

  1. PyCharm: PyCharm ist eine robuste IDE mit einer kostenlosen Community Edition. Sie bietet Funktionen wie Codeanalyse, einen visuellen Debugger und Unterstützung für die Webentwicklung.

  2. Visual Studio-Code (VS-Code): VS Code ist ein kostenloser, quelloffener Code-Editor, der von Microsoft entwickelt wurde. Seine umfangreiche Erweiterungsbibliothek macht ihn vielseitig für verschiedene Programmieraufgaben einsetzbar, einschließlich Web Scraping.

  3. Jupyter Notizbuch: Jupyter Notebook eignet sich hervorragend für interaktive Codierung und Datenexploration. Es wird häufig in Data-Science-Projekten verwendet.

  4. Spyder: Spyder ist eine IDE für wissenschaftliche und datenbezogene Aufgaben. Es bietet Funktionen wie einen Variablen-Explorer und eine interaktive Konsole.

Mit diesen Schritten ist Ihre Umgebung nun mit den notwendigen Tools für unser DeviantArt-Scraping-Vorhaben ausgestattet. In den folgenden Abschnitten werden wir diese Tools nutzen, um unseren DeviantArt Scraper zu erstellen und die Welt der digitalen Kunst zu enthüllen.

Möglichkeiten sondieren Crawlbase Crawling API

Wenn Sie sich auf die Reise begeben, Web Scraping für DeviantArt zu verwenden, ist es wichtig, die Crawlbase Crawling API. In diesem Teil werden die technischen Details von CrawlbaseDie API von vermittelt Ihnen das Know-how für die reibungslose Verwendung in Ihrem Python-Job-Scraping-Projekt.

Technische Vorteile von Crawlbase Crawling API

Die Crawlbase Crawling API bietet mehrere wichtige Vorteile und hilft Entwicklern, Webdaten zu sammeln und verschiedene Teile des Crawling-Prozesses einfach zu verwalten. Hier sind einige bemerkenswerte Vorteile:

Technische Vorteile von Crawlbase Crawling API
  1. Anpassbare Einstellungen: Crawlbase Crawling API bietet viele Einstellungen, mit denen Entwickler ihre API-Anfragen optimieren können. Dazu gehören Parameter wie „Format“, „User_Agent“, „Page_Wait“ und mehr, die eine Anpassung an spezifische Anforderungen ermöglichen.
  2. Auswahl des Datenformats: Entwickler können je nach Wunsch und Datenverarbeitungsbedarf zwischen den Antwortformaten JSON und HTML wählen. Diese Flexibilität erleichtert die Datenextraktion und -verarbeitung.
  3. Umgang mit Cookies und Headern: Durch die Verwendung von Parametern wie „get_cookies" und "get_headers„“ können Entwickler wichtige Informationen wie Cookies und Header von der Originalwebsite abrufen, die für bestimmte Web-Scraping-Aufgaben von entscheidender Bedeutung sind.
  4. Umgang mit dynamischen Inhalten: Diese API eignet sich gut für die Verarbeitung dynamischer Inhalte und ist nützlich für das Crawlen von Seiten mit JavaScript. Parameter wie „Seite_warten" und "ajax_wait„Helfen Sie Entwicklern sicherzustellen, dass die API den gesamten Inhalt erfasst, auch wenn das Laden einige Zeit dauert.
  5. IP-Adressen ändern: Mit dieser API können Sie IP-Adressen wechseln, wodurch Ihre Anonymität gewahrt bleibt und die Wahrscheinlichkeit verringert wird, von Websites blockiert zu werden. Diese Funktion macht das Web-Crawling erfolgreicher.
  6. Standort auswählen: Entwickler können ein Land für Anfragen angeben, indem sie das „Land“-Parameter, der praktisch ist, wenn Sie Daten von bestimmten Orten benötigen.
  7. Unterstützung für das Tor-Netzwerk: Durch Einschalten der „tor_netzwerkDer Parameter „“ ermöglicht das Crawlen von Onion-Websites über das Tor-Netzwerk, wodurch diese privater werden und Zugriff auf Inhalte im Dark Web gewährt wird.
  8. Scraper für Daten verwenden: Mit dieser API können Sie vordefinierte Daten-Scraper mit „Schaber“-Parameter, wodurch es einfacher wird, spezifische Informationen von Webseiten ohne großen Aufwand abzurufen.
  9. Asynchrones Crawling: Wenn Sie asynchron crawlen müssen, unterstützt die API die „async“-Parameter. Entwickler erhalten eine Anforderungskennung (RID), um gecrawlte Daten einfach abzurufen von Cloud-Speicher.
  10. Automatisches Parsen: Das "automatische AnalyseDer Parameter „“ vereinfacht die Datenextraktion, indem er analysierte Informationen im JSON-Format bereitstellt, wodurch der Bedarf an zusätzlicher Arbeit nach dem Abrufen des HTML-Inhalts reduziert wird.

Zusammenfassend, Crawlbase Crawling API ist ein leistungsstarkes Tool für Web Scraping und Datenextraktion. Es bietet eine Vielzahl von Einstellungen und Funktionen für unterschiedliche Anforderungen und macht das Web Crawling effizient und effektiv, unabhängig davon, ob Sie mit dynamischen Inhalten arbeiten, Cookies und Header verwalten, IP-Adressen ändernoder das Abrufen bestimmter Daten.

Anfrage senden mit Crawling API

Crawlbase Crawling API ist auf Einfachheit und einfache Integration in Ihre Web-Scraping-Projekte ausgelegt. Alle API-URLs beginnen mit dem Basisteil: https://api.crawlbase.com. Ihr erster API-Aufruf ist so einfach wie das Ausführen eines Befehls in Ihrem Terminal:

1
curl 'https://api.crawlbase.com/?token=YOUR_CRAWLBASE_TOKEN&url=https%3A%2F%2Fgithub.com%2Fcrawlbase%3Ftab%3Drepositories'

Hier sehen Sie den Token-Parameter, der als Authentifizierungsschlüssel für den Zugriff dient Crawlbases Web Scraping-Funktionen. Crawlbase bietet zwei Token-Typen: ein normales (TCP) Token und ein JavaScript (JS) Token. Wählen Sie das normale Token für Websites, die sich kaum ändern, wie z. B. statische Websites. Wenn Sie jedoch Informationen von einer Website abrufen möchten, die nur mit Webbrowsern mit JavaScript funktioniert, oder wenn JavaScript die gewünschten wichtigen Daten auf Benutzerseite bereitstellt, sollten Sie das JavaScript-Token verwenden. Wie bei DeviantArt ist das normale Token eine gute Wahl.

API-Antwortzeit und -Format

Bei der Auseinandersetzung mit dem Crawlbase Crawling APIist es wichtig, die Dynamik der Reaktionszeiten zu verstehen und Erfolg oder Misserfolg zu interpretieren. Schauen wir uns diese Komponenten genauer an:

Reaktionszeiten: Normalerweise weist die API Antwortzeiten im Bereich von 4 bis 10 Sekunden auf. Um einen reibungslosen Ablauf zu gewährleisten und mögliche Verzögerungen auszugleichen, wird empfohlen, ein Timeout für Aufrufe auf mindestens 90 Sekunden festzulegen. Dies schützt Ihre Anwendung und ermöglicht es ihr, Schwankungen in den Antwortzeiten ohne Unterbrechungen zu bewältigen.

Antwortformate: Bei Anfragen an CrawlbaseSie haben die Flexibilität, je nach Ihren Präferenzen und Analyseanforderungen zwischen HTML- und JSON-Antwortformaten zu wählen. Indem Sie dem Abfrageparameter „format“ die Werte „HTML“ oder „JSON“ hinzufügen, können Sie das gewünschte Format angeben.

In dem Szenario, in dem Sie das HTML-Antwortformat (die Standardeinstellung) wählen, liefert die API den HTML-Inhalt der Webseite als Antwort. Die Antwortparameter werden zur einfachen Zugänglichkeit bequem in die Antwortheader integriert. Hier ist ein anschauliches Antwortbeispiel:

1
2
3
4
5
6
7
Headers:
URL: https://github.com/crawlbase?tab=repositories
ursprünglicher_status: 200
pc_status: 200

Korpus:
HTML der Seite

Wenn Sie sich für das JSON-Antwortformat entscheiden, erhalten Sie ein strukturiertes JSON-Objekt, das in Ihrer Anwendung problemlos analysiert werden kann. Dieses Objekt enthält alle benötigten Informationen, einschließlich der Antwortparameter. Hier ist eine Beispielantwort:

1
2
3
4
5
6
{
"ursprünglicher_Status": "200",
"pc_status": 200,
"URL": "https%3A%2F%2Fgithub.com%2Fcrawlbase%3Ftab%3Drepositories",
"Karosserie": "HTML der Seite"
}

Antwort-Header: Sowohl HTML- als auch JSON-Antworten enthalten wichtige Header, die wertvolle Informationen über die Anfrage und ihr Ergebnis liefern:

  • url: Die ursprüngliche URL, die in der Anfrage gesendet wurde, oder die URL aller Weiterleitungen, die Crawlbase gefolgt.
  • original_status: Die Statusantwort, die empfangen wurde von Crawlbase beim Crawlen der in der Anfrage gesendeten URL. Es kann sich um jeden gültigen HTTP-Statuscode handeln.
  • pc_status: Der Crawlbase (pc) Statuscode. Dies kann ein beliebiger Statuscode sein und ist der Code, der letztendlich gültig ist. Wenn eine Website beispielsweise einen Originalstatus von 200 mit einer CAPTCHA-Herausforderung zurückgibt, kann der PC-Status 503 sein.
  • body: Dieser Parameter ist im JSON-Format verfügbar und enthält den Inhalt der Webseite, die Crawlbase gefunden als Ergebnis des Proxy-Crawlings der in der Anfrage gesendeten URL.

Mithilfe dieser Antwortparameter können Sie das Ergebnis Ihrer Anfragen beurteilen und feststellen, ob Ihr Web-Scraping-Vorgang erfolgreich war.

Crawling API Kenngrößen

Crawlbase bietet einen umfassenden Parametersatz, mit dem Entwickler ihre Web-Crawling-Anfragen anpassen können. Diese Parameter ermöglichen eine Feinabstimmung des Crawling-Prozesses an spezifische Anforderungen. Beispielsweise können Sie mit dem Parameter „format“ Antwortformate wie JSON oder HTML angeben oder mit „page_wait“ die Seitenwartezeiten bei der Arbeit mit JavaScript-generierten Inhalten steuern.

Darüber hinaus können Sie Cookies und Header extrahieren, benutzerdefinierte Benutzeragenten festlegen, Screenshots erstellen und sogar Geolokalisierungseinstellungen mithilfe von Parametern wie „get_cookies“, „user_agent“, „screenshot“ und „country“ festlegen. Diese Optionen bieten Flexibilität und Kontrolle über den Web-Crawling-Prozess. Um beispielsweise von der ursprünglichen Website gesetzte Cookies abzurufen, können Sie einfach den Abfrageparameter get_cookies=true in Ihre API-Anfrage einfügen. Crawlbase gibt die Cookies in den Antwortheadern zurück.

Sie können mehr darüber lesen Crawlbase Crawling API Parameter werden auf dieser Seite erläutert.

Kostenlose Testversion, Gebührenstrategie und Ratenbegrenzung

Crawlbase bietet eine Testphase für die ersten 1,000 Anfragen und ermöglicht es Ihnen, die Funktionen vor einer verbindlichen Entscheidung zu testen. Die Optimierung dieser Testphase ist jedoch entscheidend, um den größtmöglichen Nutzen daraus zu ziehen.

Betrieb nach einem „Pay-as-you-go“-Modell, Crawlbase Gebühren werden ausschließlich für erfolgreiche Anfragen erhoben, wodurch eine kostengünstige und effiziente Lösung für Ihre Web Scraping-Bemühungen gewährleistet wird. Die Bestimmung erfolgreicher Anfragen hängt von der Prüfung der original_status und pc_status innerhalb der Antwortparameter.

Die API legt eine Ratenbegrenzung fest, die die Anfragen auf maximal 20 pro Sekunde und Token begrenzt. Sollten Sie eine höhere Ratenbegrenzung benötigen, können Sie sich an den Support wenden, um eine maßgeschneiderte Diskussion zu Ihren spezifischen Anforderungen zu führen.

Crawlbase Python-Bibliothek

Die Crawlbase Die Python-Bibliothek bietet eine einfache Möglichkeit zur Interaktion mit dem Crawlbase Crawling APISie können diese leichte und abhängigkeitsfreie Python-Klasse als Wrapper für die Crawlbase API. Initialisieren Sie zunächst die Crawling API Klasse mit Ihrem Crawlbase Token. Anschließend können Sie GET-Anfragen stellen, indem Sie die zu scrapende URL und alle gewünschten Optionen, wie z. B. benutzerdefinierte Benutzeragenten oder Antwortformate, angeben. Beispielsweise können Sie eine Webseite scrapen und wie folgt auf deren Inhalt zugreifen:

1
2
3
4
5
6
7
8
9
von Crawlbase importieren CrawlingAPI

# Initialisieren Sie die CrawlingAPI-Klasse
api = CrawlingAPI({ 'Zeichen': 'IHR_CRAWLBASE_TOKEN' })

# Machen Sie eine GET-Anfrage, um eine Webseite zu scrapen
Antwort = api.get(„https://www.example.com“)
if Antwort['Statuscode'] == 200:
print(Antwort['Körper'])

Diese Bibliothek vereinfacht den Prozess des Abrufens von Webdaten und ist besonders nützlich für Szenarien, in denen dynamische Inhalte, IP-Rotation und andere erweiterte Funktionen des Crawlbase API sind erforderlich.

Crawling DeviantArt-Suchseite

Nachdem wir nun DeviantArt und eine konfigurierte Umgebung kennen, können wir uns nun mit dem spannenden Crawling der DeviantArt-Suchseite befassen. Dieser Abschnitt führt Sie durch den Import der erforderlichen Bibliotheken, die Erstellung der URL für die Suche und das Erstellen von API-Anfragen mithilfe der Crawlbase Crawling API um HTML-Inhalte abzurufen.

Importieren erforderlicher Bibliotheken

Öffnen Sie Ihren bevorzugten Python-Editor oder erstellen Sie eine neue Python-Skriptdatei. Um unser Crawling-Abenteuer zu starten, müssen wir uns mit den richtigen Tools ausstatten. Importieren Sie die erforderlichen Bibliotheken in Ihr Python-Skript:

1
von Crawlbase importieren CrawlingAPI

Hier bringen wir die CrawlingAPI Klasse von Crawlbase, um sicherzustellen, dass wir über die Fähigkeit verfügen, mit den Crawling API.

Lassen Sie uns nun die URL für unsere DeviantArt-Suche konstruieren. Angenommen, wir möchten digitale Kunst mit dem Schlüsselwort „Fantasy“ erkunden. Die URL-Konstruktion könnte folgendermaßen aussehen:

1
2
3
4
5
6
7
8
# Ersetzen Sie 'YOUR_CRAWLBASE_TOKEN' durch Ihren tatsächlichen Crawlbase API-Token
api_token = 'IHR_CRAWLBASE_TOKEN'
crawlbase_api = Crawling-API({ 'Zeichen': API-Token })

Basis-URL = „https://www.deviantart.com“
Schlüsselwort = "Fantasie"

Such-URL = f"{base_url}/suche?q={Wort}"

API-Anfragen stellen mit Crawlbase Crawling API zum Abrufen von HTML

Mit unserer fertigen URL nutzen wir die Macht der Crawlbase Crawling API um den HTML-Inhalt der DeviantArt-Suchseite abzurufen:

1
2
3
4
5
6
7
8
9
10
# Die API-Anfrage stellen
Antwort = crawlbase_api.get(Such-URL)

# Überprüfen Sie, ob die Anfrage erfolgreich war
if Antwort['Statuscode'] == 200:
# Extrahierter HTML-Inhalt nach dem Dekodieren von Byte-Daten
html_content = Antwort['Körper'].dekodieren('lateinisch1')
print(HTML-Inhalt)
sonst:
print(f"Anforderung fehlgeschlagen mit Statuscode {Antwort['Statuscode']}: {Antwort['Körper']}")

In diesem Snippet haben wir die Get-Methode der CrawlingAPI-Klasse verwendet, um eine Anfrage an die erstellte Such-URL zu stellen. Die Antwort wird dann auf Erfolg überprüft und bei Erfolg wird der HTML-Inhalt zur weiteren Untersuchung extrahiert.

Ausführen Ihres Skripts

Jetzt, da Ihr Skript fertig ist, speichern Sie es mit der Erweiterung .py, zum Beispiel deviantart_scraper.py. Öffnen Sie Ihr Terminal oder Ihre Eingabeaufforderung, navigieren Sie zum Verzeichnis des Skripts und führen Sie Folgendes aus:

1
python deviantart_scraper.py

Ersetzen Sie deviantart_scraper.py durch den tatsächlichen Namen Ihres Skripts. Drücken Sie die Eingabetaste, und Ihr Skript wird ausgeführt und der Crawling-Vorgang auf der DeviantArt-Suchseite wird eingeleitet.

Beispielausgabe:

Code HTML-Ausgabe

Mit diesen Schritten haben wir den Crawling-Prozess der DeviantArt-Suchseite eingeleitet. In den nächsten Abschnitten werden wir uns eingehender mit dem Parsen und Extrahieren von Bild-URLs befassen und so der Fertigstellung unseres DeviantArt Scrapers näher kommen.

Umgang mit Paginierung

Das Navigieren durch mehrere Seiten ist beim Scraping von Websites mit umfangreichen Inhalten eine häufige Herausforderung, und DeviantArt bildet hier keine Ausnahme. In diesem Abschnitt werden wir uns mit den Feinheiten der Seitennummerierung befassen und sicherstellen, dass unser DeviantArt-Scraper effizient ein breites Spektrum an Suchergebnissen erfasst.

Paginierung in DeviantArt verstehen

DeviantArt strukturiert Suchergebnisse über mehrere Seiten, um Inhalte systematisch zu verwalten und zu präsentieren. Jede Seite enthält normalerweise eine Teilmenge an Ergebnissen, und Benutzer blättern durch diese Seiten, um weitere Inhalte zu erkunden. Das Verständnis dieses Paginierungssystems ist für unseren Scraper unerlässlich, um einen umfassenden Datensatz zu sammeln.

Ändern von API-Anfragen für mehrere Seiten

Um unseren Scraper für die Paginierung anzupassen, müssen wir unsere API-Anfragen dynamisch ändern, während wir uns durch verschiedene Seiten bewegen. Betrachten Sie das folgende Beispiel:

1
2
3
4
5
# Angenommen, „page_number“ ist die Variable, die die Seitenzahl darstellt
Seitennummer = 10 # Ändern Sie dies in die gewünschte Seitenzahl

# Ändern Sie die Such-URL, um die Seitenzahl einzuschließen
Such-URL = f"{base_url}/suche?q={Wort}&Seite={Seitenzahl}"

In diesem Snippet haben wir angehängt &page={page_number} zur Such-URL, um die gewünschte Seite anzugeben. Während unser Scraper durch die Seiten geht, können wir die page_number entsprechend variabel.

Sicherstellung einer effizienten Seitennummerierung

Bei der Seitennummerierung ist Effizienz von größter Bedeutung, um eine unnötige Belastung der Ressourcen zu vermeiden. Erwägen Sie die Implementierung einer Schleife, um systematisch mehrere Seiten zu durchlaufen. Aktualisieren wir das Skript aus dem vorherigen Abschnitt, um die Seitennummerierung einzubinden:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
von Crawlbase importieren CrawlingAPI

def Seite scrapen(API, Basis-URL, Schlüsselwort, Seitennummer):
# Erstellen Sie die URL für die aktuelle Seite
aktuelle_Seiten-URL = f"{base_url}/suche?q={Wort}&Seite={Seitenzahl}"

# API-Anfrage stellen und HTML-Inhalt extrahieren
Antwort = api.get(aktuelle_Seiten-URL)

if Antwort['Statuscode'] == 200:
# Extrahierter HTML-Inhalt nach dem Dekodieren von Byte-Daten
html_content = Antwort['Körper'].dekodieren('lateinisch1')

# Implementieren Sie hier Ihre Analyse- und Datenextraktionslogik
# Analysieren Sie beispielsweise html_content und extrahieren Sie relevante Daten

# Vorerst wird eine Platzhalterliste zurückgegeben
Rückkehr [f"Daten von Seite {Seitenzahl}"]
sonst:
print(f"Antrag auf {aktuelle_Seiten-URL} fehlgeschlagen mit Statuscode {Antwort['Statuscode']}: {Antwort['Körper']}")
Rückkehr Keine Präsentation

def Haupt-
# Ersetzen Sie 'YOUR_CRAWLBASE_TOKEN' durch Ihren tatsächlichen Crawlbase API-Token
api_token = 'IHR_CRAWLBASE_TOKEN'
crawlbase_api = Crawling-API({ 'Zeichen': API-Token })

Basis-URL = „https://www.deviantart.com“
Schlüsselwort = "Fantasie"
Gesamtseiten = 10

# Durch Seiten iterieren und Daten scrapen
für Seitennummer in Angebot(1, Gesamtseitenzahl + 1):
# Scrape die aktuelle Seite
Daten_von_Seite = Scrape_Seite(Crawlbase_API, Basis-URL, Schlüsselwort, Seitennummer)

if Daten_von_Seite:
print(Daten_von_Seite) # Ändern Sie nach Bedarf basierend auf Ihrer Datenstruktur

if __name__ == "__hauptsächlich__":
Main()

Die scrape_page Die Funktion kapselt die Logik zum Erstellen der URL, zum Erstellen einer API-Anforderung und zum Extrahieren des HTML-Inhalts. Sie prüft den Statuscode der Antwort und verarbeitet bei Erfolg (Statuscode 200) den HTML-Inhalt zur Datenextraktion. Die main Funktion initialisiert die Crawlbase API legt die Basis-URL, das Schlüsselwort und die Gesamtzahl der zu scrapenden Seiten fest. Anschließend iteriert es durch die angegebene Anzahl von Seiten und ruft die scrape_page Funktion für jede Seite. Die extrahierten Daten, hier als Platzhalterliste dargestellt, werden zu Demonstrationszwecken ausgedruckt.

In den nächsten Abschnitten werden wir uns eingehend mit dem Prozess der Analyse von HTML-Inhalten zum Extrahieren von Bild-URLs und der Implementierung von Mechanismen zum systematischen Herunterladen dieser Bilder befassen.

Analysieren und Extrahieren von Bild-URLs

Nachdem wir nun erfolgreich durch mehrere Seiten navigiert sind, ist es an der Zeit, uns auf das Parsen und Extrahieren wertvoller Informationen aus dem HTML-Inhalt zu konzentrieren. In diesem Abschnitt erfahren Sie, wie Sie die DeviantArt-Suchseite auf CSS-Selektoren untersuchen, diese Selektoren zur Bildextraktion verwenden, die extrahierten URLs bereinigen und schließlich die Daten sowohl im CSV- als auch im SQLite-Format speichern.

Untersuchen der DeviantArt-Suchseite auf CSS-Selektoren

Bevor wir Bild-URLs extrahieren können, müssen wir die HTML-Elemente identifizieren, die die relevanten Informationen enthalten. Klicken Sie mit der rechten Maustaste auf die Webseite, wählen Sie „Untersuchen“ (oder „Element untersuchen“) und navigieren Sie durch die HTML-Struktur, um die Elemente zu finden, die die Bild-URLs enthalten.

DeviantArt strukturiert seine Bild-URLs beispielsweise in HTML-Tags wie:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<a
Datenhaken="Abweichungslink"
href=„https://www.deviantart.com/siobhan-o-wisp/art/Owl-6-925596734“
Arien-Etikett=„Eule Nr. 6 von Siobhan-o-wisp, visuelle Kunst“
>
<div
Klasse="_3_LJY"
Arie-versteckt="True"
Daten-Test-ID="Daumen"
Art der="Bildobjekt"
Vokabeln=„https://schema.org/“
Stil="Breite: 233px; Höhe: 279px"
>
<img
alt="Eule Nr. 6"
src="src_url_hier"
srcset="srcset_url_hier"
Resorts="Inhalts-URL"
Stil=„Breite: 233px; Höhe: 279px; Objektanpassung: Cover; Objektposition: 50 % 100 %“
/>
</div>
</a>

In diesem Fall könnte der CSS-Selektor für die Bild-URL lauten: a[data-hook="deviation_link"] img[property="contentUrl"].

Verwenden von CSS-Selektoren zum Extrahieren von Bild-URLs

Integrieren wir die Parsing-Logik in unser bestehendes Skript. Mithilfe der BeautifulSoup-Bibliothek können wir den HTML-Inhalt parsen und Bild-URLs basierend auf den identifizierten CSS-Selektoren. Aktualisieren Sie die Funktion scrape_page, um die Analyselogik mithilfe von CSS-Selektoren einzuschließen.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
von Crawlbase importieren CrawlingAPI
von bs4 importieren BeautifulSuppe
importieren JSON

def Seite scrapen(API, Basis-URL, Schlüsselwort, Seitennummer):
# Erstellen Sie die URL für die aktuelle Seite
aktuelle_Seiten-URL = f"{base_url}/suche?q={Wort}&Seite={Seitenzahl}"

# API-Anfrage stellen und HTML-Inhalt extrahieren
Antwort = api.get(aktuelle_Seiten-URL)

if Antwort['Statuscode'] == 200:
# Extrahierter HTML-Inhalt nach dem Dekodieren von Byte-Daten
html_content = Antwort['Körper'].dekodieren('lateinisch1')

# Implementieren Sie hier Ihre Analyse- und Datenextraktionslogik
analysierte_Daten = []
Suppe = Schöne Suppe (HTML-Inhalt, 'html.parser')

# Beispiel-CSS-Selektor für Bild-URLs
Bildauswahl = 'a[data-hook="Abweichungslink"] img[property="contentUrl"]'

# Extrahieren und Bereinigen von Bild-URLs mit dem CSS-Selektor
Bildelemente = Suppe.Auswahl(Bildselektor)
für Bildelement in Bildelemente:
# Extrahieren der Rohbild-URL
Bild-URL = Bild-Element['Quelle'].Streifen()

analysierte_Daten.anhängen({'Bild-URL': Bild-URL})

Rückkehr analysierte Daten
sonst:
print(f"Antrag auf {aktuelle_Seiten-URL} fehlgeschlagen mit Statuscode {Antwort['Statuscode']}: {Antwort['Körper']}")
Rückkehr Keine Präsentation

def Haupt-
# Ersetzen Sie 'YOUR_CRAWLBASE_TOKEN' durch Ihren tatsächlichen Crawlbase API-Token
api_token = 'IHR_CRAWLBASE_TOKEN'
crawlbase_api = Crawling-API({ 'Zeichen': API-Token })

Basis-URL = „https://www.deviantart.com“
Schlüsselwort = "Fantasie"
Gesamtseiten = 2

# Durch Seiten iterieren und Daten scrapen
alle_daten = []
für Seitennummer in Angebot(1, Gesamtseitenzahl + 1):
# Scrape die aktuelle Seite
Daten_von_Seite = Scrape_Seite(Crawlbase_API, Basis-URL, Schlüsselwort, Seitennummer)

if Daten_von_Seite:
all_data.extend(Daten_von_Seite)

# Alle Produktdetails ausdrucken oder speichern
print(json.dumps(alle_Daten, Einzug=2))

if __name__ == "__hauptsächlich__":
Main()

scrape_page(api, base_url, keyword, page_number): Diese Funktion übernimmt Parameter für die Crawlbase API-Instanz api, die Basis-URL base_url, ein Suchbegriff keywordund die Seitenzahl page_number. Es erstellt die URL für die aktuelle Seite, sendet eine Anfrage an die Crawlbase API zum Abrufen des HTML-Inhalts und extrahiert anschließend Bild-URLs mit BeautifulSoup aus dem HTML. Der für Bild-URLs verwendete CSS-Selektor ist „a[data-hook="deviation_link"] img[property="contentUrl"]'. Die extrahierten Bild-URLs werden in einer Liste von Wörterbüchern gespeichert parsed_data.
main(): Diese Funktion ist der Haupteinstiegspunkt des Skripts. Sie initialisiert die Crawlbase API mit einem bereitgestellten Token, setzt die Basis-URL auf „https://www.deviantart.com”, gibt das Suchwort als „Fantasie“ an und definiert die Gesamtzahl der zu durchsuchenden Seiten (in diesem Fall 2). Es durchläuft die angegebene Anzahl von Seiten und ruft die scrape_page Funktion für jede Seite und Anhängen der extrahierten Daten an die all_data Liste. Schließlich druckt es die extrahierten Daten in einer formatierten JSON-Darstellung mit json.dumps.

Beispielausgabe:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
[
{
"Bild URL": "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/36b9a048-0833-460c-a2f0-3a4d1c029340/de9ysag-ad79d0fb-4de7-4bd9-9223-c7c38feecc5a.png/v1/fill/w_462,h_250,q_70,strp/jungle_tombs_by_rajanandepu_de9ysag-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9NjkzIiwicGF0aCI6IlwvZlwvMzZiOWEwNDgtMDgzMy00NjBjLWEyZjAtM2E0ZDFjMDI5MzQwXC9kZTl5c2FnLWFkNzlkMGZiLTRkZTctNGJkOS05MjIzLWM3YzM4ZmVlY2M1YS5wbmciLCJ3aWR0aCI6Ijw9MTI4MCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.G3TyS8DU1qgsA9V6gmXA2bhAABHAB-YlqYyusaKu2W8"
},
{
"Bild URL": "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/31ca8292-e979-4e41-a025-8b13994f6690/d9iwdru-5a282fd0-bd6f-4904-9ec0-34a471c0e96f.jpg/v1/crop/w_163,h_250,x_0,y_0,scl_0.16717948717949,q_70,strp/fairy_bay_by_darekzabrocki_d9iwdru-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9MTUwMCIsInBhdGgiOiJcL2ZcLzMxY2E4MjkyLWU5NzktNGU0MS1hMDI1LThiMTM5OTRmNjY5MFwvZDlpd2RydS01YTI4MmZkMC1iZDZmLTQ5MDQtOWVjMC0zNGE0NzFjMGU5NmYuanBnIiwid2lkdGgiOiI8PTk3NSJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.T79tGh8ikSpiB0bgTgRiPj_jErhylF6FzhOh9V_26Hw"
},
{
"Bild URL": "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/b0069016-7cd6-4fff-b1ae-242d4172d5b4/de8zc6a-b87e753d-3657-4cf2-af4d-d55043b88486.jpg/v1/fit/w_414,h_245,q_70,strp/fantasy_maps_art_coomiissions_for_steven_by_threeanglework_de8zc6a-414w.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9NjA1IiwicGF0aCI6IlwvZlwvYjAwNjkwMTYtN2NkNi00ZmZmLWIxYWUtMjQyZDQxNzJkNWI0XC9kZTh6YzZhLWI4N2U3NTNkLTM2NTctNGNmMi1hZjRkLWQ1NTA0M2I4ODQ4Ni5qcGciLCJ3aWR0aCI6Ijw9MTAyNCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.SWEVlwSLHEY7I0Agl2IVMKxylq0LTX3Xvee57lbnoJQ"
},
{
"Bild URL": "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/7665f267-607e-41b3-93d4-d44b75b58e37/dexmkcy-8daa7a57-febe-4b40-bc06-ca2edf4355a4.jpg/v1/fill/w_670,h_350,q_70,strp/city_of_elves_by_panjoool_dexmkcy-350t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9NjcwIiwicGF0aCI6IlwvZlwvNzY2NWYyNjctNjA3ZS00MWIzLTkzZDQtZDQ0Yjc1YjU4ZTM3XC9kZXhta2N5LThkYWE3YTU3LWZlYmUtNGI0MC1iYzA2LWNhMmVkZjQzNTVhNC5qcGciLCJ3aWR0aCI6Ijw9MTI4MCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.F6h5UrGiIOe0ct6XH2EP5g6sB06TI0TQDZa7yq08shM"
},
{
"Bild URL": "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/38961eb5-6954-4066-a5b4-74c4c17bba02/dessk9p-898c4573-2759-4e13-8c6e-c6af5893cb77.png/v1/fill/w_566,h_350/magic_forest_by_postapodcast_dessk9p-350t.png?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9NzkyIiwicGF0aCI6IlwvZlwvMzg5NjFlYjUtNjk1NC00MDY2LWE1YjQtNzRjNGMxN2JiYTAyXC9kZXNzazlwLTg5OGM0NTczLTI3NTktNGUxMy04YzZlLWM2YWY1ODkzY2I3Ny5wbmciLCJ3aWR0aCI6Ijw9MTI4MCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.aZ3GIu_6Jnj1k6w9ci7KRrzCdWTSTD__fJUZaKUBayw"
},
{
"Bild URL": "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/8fd505b7-1d62-42fa-ae28-60294fb112fa/da4h819-5434889d-db48-41c0-a548-15ffb704ffc7.jpg/v1/fill/w_700,h_329,q_70,strp/the_grand_gate_by_merl1ncz_da4h819-350t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9NzA1IiwicGF0aCI6IlwvZlwvOGZkNTA1YjctMWQ2Mi00MmZhLWFlMjgtNjAyOTRmYjExMmZhXC9kYTRoODE5LTU0MzQ4ODlkLWRiNDgtNDFjMC1hNTQ4LTE1ZmZiNzA0ZmZjNy5qcGciLCJ3aWR0aCI6Ijw9MTUwMCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.wBoGmmno1N26VvCPVDR2pdkCNP_rYpxxo_dmQdYvSXc"
},
{
"Bild URL": "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/6ff2ccfb-d302-4348-87bc-8b9568748e63/d8ox1uh-3baf219c-0bac-47fa-b227-c89a8134845c.jpg/v1/fill/w_657,h_350,q_70,strp/journey_home_ii_by_jjcanvas_d8ox1uh-350t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9NjgyIiwicGF0aCI6IlwvZlwvNmZmMmNjZmItZDMwMi00MzQ4LTg3YmMtOGI5NTY4NzQ4ZTYzXC9kOG94MXVoLTNiYWYyMTljLTBiYWMtNDdmYS1iMjI3LWM4OWE4MTM0ODQ1Yy5qcGciLCJ3aWR0aCI6Ijw9MTI4MCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.r83EO9Verq40yofAO0J5aaxk39zI_3Km8xy9IhcHTJU"
},
{
"Bild URL": "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/0f32ddfc-07dd-4afe-bcfd-60218bd1c565/d9woys6-489490fe-e3f3-493d-b5dd-b74b36d72044.jpg/v1/fill/w_622,h_350,q_70,strp/wizard_overlord_by_88grzes_d9woys6-350t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9NTc2IiwicGF0aCI6IlwvZlwvMGYzMmRkZmMtMDdkZC00YWZlLWJjZmQtNjAyMThiZDFjNTY1XC9kOXdveXM2LTQ4OTQ5MGZlLWUzZjMtNDkzZC1iNWRkLWI3NGIzNmQ3MjA0NC5qcGciLCJ3aWR0aCI6Ijw9MTAyNCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.CWF2dVY5FD_pY6In-SM4iSHUtKZ4LcWz7w4jckLSotM"
},
{
"Bild URL": "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/677a3275-419d-415d-a4ee-fe2097a24e46/ddfkq9w-cc46d438-9640-428e-a1e7-986fdede405d.jpg/v1/fill/w_700,h_339,q_70,strp/fantasy_landscape_by_blueavel_ddfkq9w-350t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9NDg0IiwicGF0aCI6IlwvZlwvNjc3YTMyNzUtNDE5ZC00MTVkLWE0ZWUtZmUyMDk3YTI0ZTQ2XC9kZGZrcTl3LWNjNDZkNDM4LTk2NDAtNDI4ZS1hMWU3LTk4NmZkZWRlNDA1ZC5qcGciLCJ3aWR0aCI6Ijw9MTAwMCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.qRJRzrqAUyn-IxUZovvdfIkqeQ4PyYFwO4PA5fZSVuw"
},
{
"Bild URL": "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/cf4e3b17-25ab-486e-9863-1d2651123f7e/d45tdhb-2cceea9d-cf27-4325-92f0-9c8f8c406872.jpg/v1/fill/w_143,h_250,q_70,strp/fantasy_castle_by_peterconcept_d45tdhb-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9MTAwMCIsInBhdGgiOiJcL2ZcL2NmNGUzYjE3LTI1YWItNDg2ZS05ODYzLTFkMjY1MTEyM2Y3ZVwvZDQ1dGRoYi0yY2NlZWE5ZC1jZjI3LTQzMjUtOTJmMC05YzhmOGM0MDY4NzIuanBnIiwid2lkdGgiOiI8PTU3MSJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.5lnZruTFCmZkMar66M81rvQQloK8sCoZtIa6aqMOpVo"
},
{
"Bild URL": "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/a0102abd-a974-49be-9415-5d6329de2615/d85kpn2-969091cf-bf6c-45e3-8431-e37425010343.jpg/v1/fill/w_500,h_250,q_70,strp/fantasy_city_by_britneypringle_d85kpn2-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9NTEyIiwicGF0aCI6IlwvZlwvYTAxMDJhYmQtYTk3NC00OWJlLTk0MTUtNWQ2MzI5ZGUyNjE1XC9kODVrcG4yLTk2OTA5MWNmLWJmNmMtNDVlMy04NDMxLWUzNzQyNTAxMDM0My5qcGciLCJ3aWR0aCI6Ijw9MTAyNCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.WGMQEQnTucVFLQ734ScVyRUCJVuaNvucC8hx10KnSak"
},
{
"Bild URL": "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/2f9d63ea-05a6-44f9-a06d-3c3506ace1a6/dc7rp7q-8cde501b-30a5-4c5b-a7c0-e8da6577d000.jpg/v1/fit/w_414,h_240,q_70,strp/mushy_land_by_raphael_lacoste_dc7rp7q-414w.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9OTI4IiwicGF0aCI6IlwvZlwvMmY5ZDYzZWEtMDVhNi00NGY5LWEwNmQtM2MzNTA2YWNlMWE2XC9kYzdycDdxLThjZGU1MDFiLTMwYTUtNGM1Yi1hN2MwLWU4ZGE2NTc3ZDAwMC5qcGciLCJ3aWR0aCI6Ijw9MTYwMCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.eFslHR3hiGwNnIsEWI82ZRXAfbrdGHZOHn2nBfRa_Qg"
},
{
"Bild URL": "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/5676e946-eac5-462d-8385-566c5e7b4794/dek1geb-693d25d3-c206-409f-abb0-0fce7bf52b45.jpg/v1/fill/w_700,h_336,q_70,strp/homecoming_by_flaviobolla_dek1geb-350t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9NzY5IiwicGF0aCI6IlwvZlwvNTY3NmU5NDYtZWFjNS00NjJkLTgzODUtNTY2YzVlN2I0Nzk0XC9kZWsxZ2ViLTY5M2QyNWQzLWMyMDYtNDA5Zi1hYmIwLTBmY2U3YmY1MmI0NS5qcGciLCJ3aWR0aCI6Ijw9MTYwMCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.VRn481jxhnjKhv47e9WMKclr0piK7T7ljM7IbMn42GU"
},
{
"Bild URL": "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/35267649-f012-4cf7-9907-94a5d524e332/dcya6ht-644bdc7e-efbc-40a4-8fd3-727832ddd5ca.jpg/v1/fill/w_635,h_350,q_70,strp/fantasy_castle_012219_by_rich35211_dcya6ht-350t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9MTMwMSIsInBhdGgiOiJcL2ZcLzM1MjY3NjQ5LWYwMTItNGNmNy05OTA3LTk0YTVkNTI0ZTMzMlwvZGN5YTZodC02NDRiZGM3ZS1lZmJjLTQwYTQtOGZkMy03Mjc4MzJkZGQ1Y2EuanBnIiwid2lkdGgiOiI8PTIzNjAifV1dLCJhdWQiOlsidXJuOnNlcnZpY2U6aW1hZ2Uub3BlcmF0aW9ucyJdfQ.LYDYnkQTWyJWgjerl0PG8N8Qp64J98PAcMDt2_ngjGs"
},
{
"Bild URL": "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/0c6e0590-011b-4912-bfe4-9353b6e5dc98/ddxqz6d-71e5fc4a-1d91-4cd4-b074-0cb826b70f84.jpg/v1/fill/w_199,h_250,q_70,strp/ramparts_by_eddie_mendoza_ddxqz6d-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9MTQ1MCIsInBhdGgiOiJcL2ZcLzBjNmUwNTkwLTAxMWItNDkxMi1iZmU0LTkzNTNiNmU1ZGM5OFwvZGR4cXo2ZC03MWU1ZmM0YS0xZDkxLTRjZDQtYjA3NC0wY2I4MjZiNzBmODQuanBnIiwid2lkdGgiOiI8PTExNTYifV1dLCJhdWQiOlsidXJuOnNlcnZpY2U6aW1hZ2Uub3BlcmF0aW9ucyJdfQ.0NFGpaE22d48MHr2PTfPQlDss07ec8iwKXGKtpRgq3c"
},
{
"Bild URL": "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/aea046b5-589a-463d-9119-f40d956640f2/dewfvci-253919a9-25b6-43b0-87ba-4c99ddd766bd.jpg/v1/fill/w_200,h_250,q_70,strp/samurai_guardian___photoshop_art_by_phaserunner_dewfvci-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9MTMwMCIsInBhdGgiOiJcL2ZcL2FlYTA0NmI1LTU4OWEtNDYzZC05MTE5LWY0MGQ5NTY2NDBmMlwvZGV3ZnZjaS0yNTM5MTlhOS0yNWI2LTQzYjAtODdiYS00Yzk5ZGRkNzY2YmQuanBnIiwid2lkdGgiOiI8PTEwNDAifV1dLCJhdWQiOlsidXJuOnNlcnZpY2U6aW1hZ2Uub3BlcmF0aW9ucyJdfQ.pSPdQ7FqWJu_iqi1vJjmUuUBKOIOC_qtwathhKubLAc"
},
{
"Bild URL": "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/6ff2ccfb-d302-4348-87bc-8b9568748e63/dagt780-aca17f21-148a-40f3-b27e-fb3795bdb274.jpg/v1/fill/w_444,h_250,q_70,strp/the_secret_entrance_by_jjcanvas_dagt780-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9NzIwIiwicGF0aCI6IlwvZlwvNmZmMmNjZmItZDMwMi00MzQ4LTg3YmMtOGI5NTY4NzQ4ZTYzXC9kYWd0NzgwLWFjYTE3ZjIxLTE0OGEtNDBmMy1iMjdlLWZiMzc5NWJkYjI3NC5qcGciLCJ3aWR0aCI6Ijw9MTI4MCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.i44QkrqohRXgceqNI3b0x2ARW0UIJK2NDDDjPoSVZ9I"
},
{
"Bild URL": "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/f240a8b1-06c4-4ffa-9ba0-853a80e54e12/des3vvj-a1c9c5bf-5311-45c4-96e9-b3078b0012da.png/v1/fill/w_163,h_250,q_70,strp/forest_journey_by_aszith_des3vvj-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9MTIyNyIsInBhdGgiOiJcL2ZcL2YyNDBhOGIxLTA2YzQtNGZmYS05YmEwLTg1M2E4MGU1NGUxMlwvZGVzM3Z2ai1hMWM5YzViZi01MzExLTQ1YzQtOTZlOS1iMzA3OGIwMDEyZGEucG5nIiwid2lkdGgiOiI8PTgwMCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.CHWmKX7b7Kswbv4XHh-YQlNzmHzc2DQsP5thVGP_iD0"
},
{
"Bild URL": "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/d9752802-856c-4511-837b-6eadbdb551b8/devdavw-d59b805d-64a1-4a2c-be45-154ecc6c5617.jpg/v1/fill/w_622,h_350,q_70,strp/kingdom_by_oliverbeck_devdavw-350t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9MTA4MCIsInBhdGgiOiJcL2ZcL2Q5NzUyODAyLTg1NmMtNDUxMS04MzdiLTZlYWRiZGI1NTFiOFwvZGV2ZGF2dy1kNTliODA1ZC02NGExLTRhMmMtYmU0NS0xNTRlY2M2YzU2MTcuanBnIiwid2lkdGgiOiI8PTE5MjAifV1dLCJhdWQiOlsidXJuOnNlcnZpY2U6aW1hZ2Uub3BlcmF0aW9ucyJdfQ.D8s098xZS2g6ggPrl0Iw7rQzYf5OcWS8QKySdjg0GL4"
},
{
"Bild URL": "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/0c6e0590-011b-4912-bfe4-9353b6e5dc98/ddn4c9i-8560bfd6-2236-47a5-8bf5-a73b5dc67328.jpg/v1/fill/w_643,h_350,q_70,strp/canal_town_by_eddie_mendoza_ddn4c9i-350t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9OTI1IiwicGF0aCI6IlwvZlwvMGM2ZTA1OTAtMDExYi00OTEyLWJmZTQtOTM1M2I2ZTVkYzk4XC9kZG40YzlpLTg1NjBiZmQ2LTIyMzYtNDdhNS04YmY1LWE3M2I1ZGM2NzMyOC5qcGciLCJ3aWR0aCI6Ijw9MTcwMCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.xgGzUkprTYO2Tg4vvz7Ctq56tFR58q4mNxhpoMl_14Y"
},
{
"Bild URL": "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/882eb67f-8d3f-470f-a043-0225b551ee06/da6chgs-f1f4e973-92eb-4b59-b60d-b31fea9a7611.jpg/v1/fill/w_700,h_324,q_70,strp/fantasy_landscape_5_by_daisanvisart_da6chgs-350t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9NDE3IiwicGF0aCI6IlwvZlwvODgyZWI2N2YtOGQzZi00NzBmLWEwNDMtMDIyNWI1NTFlZTA2XC9kYTZjaGdzLWYxZjRlOTczLTkyZWItNGI1OS1iNjBkLWIzMWZlYTlhNzYxMS5qcGciLCJ3aWR0aCI6Ijw9OTAwIn1dXSwiYXVkIjpbInVybjpzZXJ2aWNlOmltYWdlLm9wZXJhdGlvbnMiXX0.5d8EegjXzeJ8ePHg5ZhzmHfJl6kSLf--vFK2ghEuj08"
},
{
"Bild URL": "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/7665f267-607e-41b3-93d4-d44b75b58e37/dem904a-235a588a-34b6-42e6-94ec-2496d7e61773.jpg/v1/fill/w_684,h_350,q_70,strp/the_kingdom_by_panjoool_dem904a-350t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9OTg0IiwicGF0aCI6IlwvZlwvNzY2NWYyNjctNjA3ZS00MWIzLTkzZDQtZDQ0Yjc1YjU4ZTM3XC9kZW05MDRhLTIzNWE1ODhhLTM0YjYtNDJlNi05NGVjLTI0OTZkN2U2MTc3My5qcGciLCJ3aWR0aCI6Ijw9MTkyMCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.g6vuGPKnGtajUm_h9iQRaufGZ2K4BkDtURK9AXXjmls"
},
{
"Bild URL": "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/6ff2ccfb-d302-4348-87bc-8b9568748e63/dcozqaf-5514dcfe-1363-4eac-9929-a9605ef2b140.jpg/v1/fill/w_595,h_350,q_70,strp/forgotten_kingdoms_iv_by_jjcanvas_dcozqaf-350t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9ODIzIiwicGF0aCI6IlwvZlwvNmZmMmNjZmItZDMwMi00MzQ4LTg3YmMtOGI5NTY4NzQ4ZTYzXC9kY296cWFmLTU1MTRkY2ZlLTEzNjMtNGVhYy05OTI5LWE5NjA1ZWYyYjE0MC5qcGciLCJ3aWR0aCI6Ijw9MTQwMCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.fh4lMrrTAj8LKRVn0dzvmV_oRSpvJsppbK6ipuJBciY"
},
{
"Bild URL": "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/4b0bb084-0057-48cf-92b4-7319629b576c/damprvc-31559c47-6da4-461c-b218-0a15bd7ee31e.jpg/v1/fill/w_700,h_298,q_70,strp/a_new_friend_by_grivetart_damprvc-350t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9ODUxIiwicGF0aCI6IlwvZlwvNGIwYmIwODQtMDA1Ny00OGNmLTkyYjQtNzMxOTYyOWI1NzZjXC9kYW1wcnZjLTMxNTU5YzQ3LTZkYTQtNDYxYy1iMjE4LTBhMTViZDdlZTMxZS5qcGciLCJ3aWR0aCI6Ijw9MjAwMCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.BYESPqEjOAWFf4FVrBDlGfn4sXJbcUSJG_otWz7Qppg"
}
]

Extrahierte Daten in CSV- und SQLite-Datenbank speichern

Jetzt aktualisieren wir die main Funktion zum Verarbeiten der extrahierten Daten und Speichern im CSV- und SQLite-Format.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
importieren sqlite3
von Crawlbase importieren CrawlingAPI
von bs4 importieren BeautifulSuppe
importieren Pandas as pd

def Datenbank initialisieren(db_dateiname=„deviantart_data.db“):
conn = sqlite3.connect(db_dateiname)
Cursor = conn.cursor()

Cursor.ausführen('' '
Tabelle erstellen, wenn nicht vorhanden deviantart_data (
id INTEGER PRIMÄRSCHLÜSSEL,
image_url TEXT
)
'' ')

# Änderungen übernehmen und Verbindung schließen
conn.commit()
conn.close()

def Daten in Datenbank einfügen(Daten, db_Dateiname=„deviantart_data.db“):
conn = sqlite3.connect(db_dateiname)
Cursor = conn.cursor()

# Daten in die Tabelle einfügen
für Reihe in Daten:
Cursor.ausführen(„WERTE IN deviantart_data (bild_url) EINFÜGEN (?)“, (Reihe['Bild-URL'],))

# Änderungen übernehmen und Verbindung schließen
conn.commit()
conn.close()

def Seite scrapen(API, Basis-URL, Schlüsselwort, Seitennummer):
# Erstellen Sie die URL für die aktuelle Seite
aktuelle_Seiten-URL = f"{base_url}/suche?q={Wort}&Seite={Seitenzahl}"

# API-Anfrage stellen und HTML-Inhalt extrahieren
Antwort = api.get(aktuelle_Seiten-URL)

if Antwort['Statuscode'] == 200:
# Extrahierter HTML-Inhalt nach dem Dekodieren von Byte-Daten
html_content = Antwort['Körper'].dekodieren('lateinisch1')

# Implementieren Sie hier Ihre Analyse- und Datenextraktionslogik
analysierte_Daten = []
Suppe = Schöne Suppe (HTML-Inhalt, 'html.parser')

# Beispiel-CSS-Selektor für Bild-URLs
Bildauswahl = 'a[data-hook="Abweichungslink"] img[property="contentUrl"]'

# Extrahieren und Bereinigen von Bild-URLs mit dem CSS-Selektor
Bildelemente = Suppe.Auswahl(Bildselektor)
für Bildelement in Bildelemente:
# Extrahieren der Rohbild-URL
Bild-URL = Bild-Element['Quelle'].Streifen()

analysierte_Daten.anhängen({'Bild-URL': Bild-URL})

Rückkehr analysierte Daten
sonst:
print(f"Antrag auf {aktuelle_Seiten-URL} fehlgeschlagen mit Statuscode {Antwort['Statuscode']}: {Antwort['Körper']}")
Rückkehr Keine Präsentation

def Haupt-
# Ersetzen Sie 'YOUR_CRAWLBASE_TOKEN' durch Ihren tatsächlichen Crawlbase API-Token
api_token = 'IHR_CRAWLBASE_TOKEN'
crawlbase_api = Crawling-API({ 'Zeichen': API-Token })

Basis-URL = „https://www.deviantart.com“
Schlüsselwort = "Fantasie"
Gesamtseiten = 2

# Durch Seiten iterieren und Daten scrapen
alle_daten = []
für Seitennummer in Angebot(1, Gesamtseitenzahl + 1):
# Scrape die aktuelle Seite
Daten_von_Seite = Scrape_Seite(Crawlbase_API, Basis-URL, Schlüsselwort, Seitennummer)

if Daten_von_Seite:
all_data.extend(Daten_von_Seite)

# Alle Daten mit Pandas in CSV speichern
df = pd.DataFrame(alle_Daten)
csv_dateiname = „deviantart_data.csv“
df.to_csv(csv_dateiname, index=falsch, Kodierung='utf-8')

# Rufen Sie die Funktion initialize_database auf
initialisieren_datenbank()
# Alle Daten in die Datenbank einfügen
Daten in Datenbank einfügen (alle Daten)

if __name__ == "__hauptsächlich__":
Main()
  • Für die CSV-Speicherung verwendet das Skript die Pandas-Bibliothek, um aus den extrahierten Daten einen DataFrame df zu erstellen und schreibt den DataFrame dann in eine CSV-Datei deviantart_data.csv mit der Methode to_csv.
  • Bei SQLite-Datenbankspeicher initialisiert das Skript die Datenbank mit dem initialize_database Funktion und fügt die extrahierten Daten in die deviantart_data Tabelle mit dem insert_data_into_database Funktion. Die Datenbankdatei deviantart_data.db wird bei jedem Ausführen des Skripts erstellt und aktualisiert und enthält die ID- und Bild-URL-Spalten für jeden Datensatz.

deviantart_data.csv Vorschau:

deviantart_data.csv Vorschau

deviantart_data.db Vorschau:

deviantart_data.db Vorschau

Herunterladen von Bildern von extrahierten Bild-URLs

Dieser Abschnitt führt Sie durch den Prozess der Verwendung von Python zum Herunterladen von Bildern von URLs, die aus DeviantArt stammen, zum Behandeln potenzieller Downloadfehler und zum effizienten Organisieren der heruntergeladenen Bilder.

Verwenden von Python zum Herunterladen von Bildern

Python bietet eine Vielzahl von Bibliotheken für die Verarbeitung von HTTP-Anfragen und das Herunterladen von Dateien. Eine gängige und benutzerfreundliche Wahl ist die requests Bibliothek. Unten sehen Sie ein einfaches Beispiel, wie Sie damit ein Bild herunterladen können:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
importieren Zugriffe

def Bild herunterladen(URL, Pfad speichern):
versuchen:
Antwort = Anfragen.get(URL, Stream=richtig)
Response.raise_for_status()

und XNUMXh geöffnet(Pfad speichern, 'wb') as Datei:
für Brocken in Antwort.iter_content(Blockgröße=8192):
Datei.schreiben(Block)

print(f"Bild erfolgreich heruntergeladen: {Pfad speichern}")

ausgeschlossen Anfragen.Ausnahmen.RequestException as e:
print(f"Fehler beim Herunterladen des Bildes von {URL}: {e}")

# Beispielverwendung
Bild-URL = „https://example.com/image.jpg“
Downloadpfad = "heruntergeladene_Bilder/bild.jpg"
download_image(Bild-URL, Download-Pfad)

Diese Funktion, download_image, nimmt eine Bild-URL und einen lokalen Pfad, in dem das Bild gespeichert werden soll. Es verwendet dann die requests Bibliothek, um das Bild herunterzuladen.

Heruntergeladene Bilder organisieren

Das Organisieren heruntergeladener Bilder in einem strukturierten Verzeichnis kann die weitere Verarbeitung erheblich vereinfachen. Erwägen Sie die Erstellung einer Ordnerstruktur basierend auf Kategorien, Schlüsselwörtern oder anderen relevanten Kriterien. Hier ist ein einfaches Beispiel, wie Sie heruntergeladene Bilder organisieren könnten:

1
2
3
4
5
6
7
heruntergeladene_bilder/
|-- Fantasie/
| |-- bild1.jpg
| |-- bild2.jpg
|-- Science-Fiction/
| |-- bild3.jpg
| |-- bild4.jpg

Diese Organisation kann erreicht werden durch die Anpassung der download_path in England, download_image Funktion basierend auf der Kategorie oder allen relevanten Informationen, die mit jedem Bild verknüpft sind.

Mit diesen Schritten können Sie nicht nur Bilder von DeviantArt herunterladen, sondern auch Fehler effektiv beheben und die heruntergeladenen Bilder für einen einfachen Zugriff und eine weitere Analyse organisieren.

Zusammenfassung

Ich hoffe, dass Sie nun problemlos Bilder von DeviantArt mit Python und dem herunterladen und scrapen können. Crawlbase Crawling API. Und indem Sie Python verwenden und die DeviantArt-Suchseiten ausprobieren, haben Sie außerdem gelernt, wie Sie Bildlinks effektiv herausnehmen und organisieren.

Egal, ob Sie eine Sammlung digitaler Kunst anlegen oder versuchen, herauszufinden, was auf DeviantArt zu finden ist, es ist wichtig, das Web verantwortungsbewusst zu durchsuchen. Befolgen Sie immer die Regeln der Plattform und handeln Sie ethisch.

Jetzt, da Sie über diese nützlichen Fähigkeiten verfügen, können Sie selbst mit dem Scraping im Web beginnen. Wenn Sie auf Probleme stoßen, können Sie den Crawlbase Support-Team um Hilfe.

Häufig gestellte Fragen

Obwohl Web Scraping an sich im Allgemeinen legal ist, ist es wichtig, sich innerhalb der Grenzen zu bewegen, die in den Servicebedingungen von DeviantArt festgelegt sind. DeviantArt Scraper arbeitet unter Einhaltung ethischer Scraping-Praktiken. Lesen Sie immer die Richtlinien von DeviantArt und halten Sie diese ein, um eine verantwortungsvolle und rechtmäßige Nutzung sicherzustellen.

F: Wie kann ich die Seitennummerierung beim Scraping von DeviantArt handhaben?

Die Verwaltung der Seitennummerierung in DeviantArt umfasst das Erstellen von URLs für verschiedene Seiten in den Suchergebnissen. Die Anleitung zeigt, wie API-Anfragen für mehrere Seiten angepasst werden können, um ein reibungsloses Durchlaufen der DeviantArt-Suchseiten zu ermöglichen. Dies gewährleistet einen umfassenden Datenabruf für eine gründliche Erkundung.

F: Kann ich die Daten, die ich von DeviantArt scrape, anpassen?

Absolut. Der Leitfaden bietet Einblicke in die Überprüfung der HTML-Struktur von DeviantArt-Suchseiten und die Nutzung von CSS-Selektoren. Diese Anpassung ermöglicht es Ihnen, Ihre Datenextraktion anzupassen und sich auf bestimmte Informationen wie Bild-URLs zu konzentrieren. Passen Sie die Scraping-Logik an Ihre individuellen Bedürfnisse und Vorlieben an.

F: Welche Vorteile bietet die Speicherung von Daten sowohl im CSV- als auch im SQLite-Format?

Das Speichern von Daten in den Formaten CSV und SQLite bietet einen vielseitigen Ansatz. CSV erleichtert das Teilen und Analysieren von Daten und macht sie für verschiedene Anwendungen zugänglich. Auf der anderen Seite bietet SQLite eine leichte Datenbanklösung, die einen effizienten Datenabruf und eine effiziente Datenverwaltung in Ihren Python-Projekten gewährleistet. Dieser Dual-Format-Ansatz ist auf unterschiedliche Anwendungsfälle und Vorlieben zugeschnitten.