Wie man OpenSea mit Python im Jahr 2025 scrapen kann

Erfahren Sie, wie Sie einen Python-basierten OpenSea Scraper erstellen, um automatisch wichtige NFT-Daten zu extrahieren.
13 min lesen
How to Scrape Opensea blog image

In diesem Blogbeitrag erfahren Sie mehr:

  • Was ein OpenSea Scraper ist
  • Die Arten von Daten, die Sie automatisch aus OpenSea extrahieren können
  • Wie man ein OpenSea-Skript mit Python erstellt
  • Wann und warum eine fortschrittlichere Lösung erforderlich sein kann

Lasst uns eintauchen!

Was ist ein OpenSea Scraper?

Ein OpenSea Scraper ist ein Tool, das für Daten von OpenSea, dem weltweit größten NFT-Marktplatz, entwickelt wurde. Das Hauptziel dieses Tools ist es, die Sammlung verschiedener NFT-bezogener Informationen zu automatisieren. In der Regel werden automatisierte Browserlösungen verwendet, um OpenSea-Daten in Echtzeit abzurufen, ohne dass manuelle Eingriffe erforderlich sind.

Daten aus OpenSea auslesen

Hier sind einige der wichtigsten Datenpunkte, die Sie von OpenSea abrufen können:

  • NFT-Sammlungsname: Der Titel oder Name der NFT-Sammlung.
  • Rang der Sammlung: Der Rang oder die Position der Sammlung auf der Grundlage ihrer Leistung.
  • NFT-Bild: Das Bild, das mit der NFT-Sammlung oder dem Element verbunden ist.
  • Mindestpreis: Der Mindestpreis, der für einen Artikel in der Sammlung angegeben wird.
  • Volumen: Das gesamte Handelsvolumen der NFT-Sammlung.
  • Prozentuale Veränderung: Die Preisänderung oder die prozentuale Veränderung der Wertentwicklung der Sammlung in einem bestimmten Zeitraum.
  • Token-ID: Der eindeutige Bezeichner für jede NFT in der Sammlung.
  • Letzter Verkaufspreis: Der letzte Verkaufspreis eines NFT in der Sammlung.
  • Verkaufsverlauf: Die Transaktionshistorie für jeden NFT-Artikel, einschließlich früherer Preise und Käufer.
  • Angebote: Aktive Angebote, die für eine NFT in der Sammlung abgegeben wurden.
  • Ersteller-Informationen: Details über den Ersteller der NFT, wie z. B. sein Benutzername oder Profil.
  • Merkmale/Attribute: Besondere Merkmale oder Eigenschaften der NFT-Gegenstände (z. B. Seltenheit, Farbe usw.).
  • Beschreibung des Gegenstands: Eine kurze Beschreibung oder Information über den NFT-Artikel.

Wie man OpenSea scrappt: Schritt-für-Schritt-Anleitung

In diesem geführten Abschnitt lernen Sie, wie man einen OpenSea Scraper erstellt. Ziel ist es, ein Python-Skript zu entwickeln, das automatisch Daten zu NFT-Sammlungen aus dem Abschnitt “Top” der Seite “Spiele” sammelt:

Die OpenSea-Zielseite "Spiele"

Folgen Sie den nachstehenden Schritten und sehen Sie, wie Sie OpenSea scrapen können!

Schritt 1: Projekt einrichten

Bevor Sie beginnen, vergewissern Sie sich, dass Sie Python 3 auf Ihrem Rechner installiert haben. Andernfalls laden Sie es herunter und folgen Sie den Installationsanweisungen.

Verwenden Sie den folgenden Befehl, um einen Ordner für Ihr Projekt zu erstellen:

mkdir opensea-scraper

Das Verzeichnis opensea-scraper stellt den Projektordner Ihres Python OpenSea Scrapers dar.

Navigieren Sie im Terminal dorthin, und initialisieren Sie eine virtuelle Umgebung darin:

cd opensea-scraper
python -m venv venv

Laden Sie den Projektordner in Ihre bevorzugte Python-IDE. Visual Studio Code mit der Python-Erweiterung oder PyCharm Community Edition sind geeignet.

Erstellen Sie eine scraper.py-Datei im Projektordner, die nun diese Dateistruktur enthalten sollte:

Das Projekt OpenSea Scraper

Im Moment ist scraper.py ein leeres Python-Skript, aber es wird bald die gewünschte Scraping-Logik enthalten.

Aktivieren Sie im Terminal der IDE die virtuelle Umgebung. Unter Linux oder macOS starten Sie diesen Befehl:

./env/bin/activate

Unter Windows führen Sie entsprechend aus:

env/Scripts/activate

Erstaunlich, Sie haben jetzt eine Python-Umgebung für Web Scraping!

Schritt #2: Wählen Sie die Scraping-Bibliothek

Bevor Sie sich in die Programmierung stürzen, müssen Sie die besten Scraping-Tools zum Extrahieren der benötigten Daten ermitteln. Dazu sollten Sie zunächst einen Vorabtest durchführen, um zu analysieren, wie sich die Zielsite wie folgt verhält:

  1. Öffnen Sie die Zielseite im Inkognito-Modus, um zu verhindern, dass zuvor gespeicherte Cookies und Einstellungen Ihre Analyse beeinträchtigen.
  2. Klicken Sie mit der rechten Maustaste auf eine beliebige Stelle der Seite und wählen Sie “Prüfen”, um die Entwicklerwerkzeuge des Browsers zu öffnen.
  3. Navigieren Sie zur Registerkarte “Netzwerk”.
  4. Laden Sie die Seite neu und interagieren Sie mit ihr, indem Sie beispielsweise auf die Schaltflächen “1h” und “6h” klicken.
  5. Überwachen Sie die Aktivität auf der Registerkarte “Fetch/XHR”.

Dies gibt Ihnen Aufschluss darüber, ob die Webseite Daten dynamisch lädt und rendert:

Beachten Sie die dynamische GraphQL-Anfrage

In diesem Abschnitt können Sie alle AJAX-Anfragen sehen, die die Seite in Echtzeit stellt. Wenn Sie diese Anfragen untersuchen, werden Sie feststellen, dass OpenSea dynamisch Daten vom Server abruft. Außerdem zeigt eine weitere Analyse, dass einige Schaltflächeninteraktionen das JavaScript-Rendering auslösen, um den Seiteninhalt dynamisch zu aktualisieren.

Dies zeigt, dass für das Scraping von OpenSea ein Browser-Automatisierungstool wie Selenium erforderlich ist!

Mit Selenium können Sie einen Webbrowser programmatisch steuern und echte Benutzerinteraktionen imitieren, um Daten effektiv zu extrahieren. Installieren wir es und fangen wir an.

Schritt #3: Selenium installieren und einrichten

Sie können Selenium über das Pip-Paket selenium beziehen. Aktivieren Sie Ihre virtuelle Umgebung und führen Sie den folgenden Befehl aus, um Selenium zu installieren:

pip install -U selenium

Eine Anleitung zur Verwendung des Browser-Automatisierungstools finden Sie in unserem Leitfaden zum Web Scraping mit Selenium.

Importieren Sie Selenium in scraper.py und initialisieren Sie ein WebDriver-Objekt zur Steuerung von Chrome:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service

# Create a Chrome web driver instance
driver = webdriver.Chrome(service=Service())

Das obige Snippet richtet eine WebDriver-Instanz für die Interaktion mit Chrome ein. Denken Sie daran, dass OpenSea Anti-Scraping-Maßnahmen einsetzt, die Headless-Browser erkennen und sie blockieren. Insbesondere gibt der Server eine “Access Denied”-Seite zurück.

Das bedeutet, dass Sie das --headless-Flag für diesen Scraper nicht verwenden können. Als Alternative können Sie Playwright Stealth oder SeleniumBase verwenden.

Da OpenSea sein Layout an die Fenstergröße anpasst, maximieren Sie das Browserfenster, um sicherzustellen, dass die Desktop-Version gerendert wird:

driver.maximize_window() 

Abschließend sollten Sie immer sicherstellen, dass Sie den WebDriver ordnungsgemäß schließen, um Ressourcen freizugeben:

driver.quit()

Wunderbar! Sie sind nun vollständig konfiguriert, um mit dem Scannen von OpenSea zu beginnen.

Schritt #4: Besuchen Sie die Zielseite

Verwenden Sie die get() -Methode von Selenium WebDriver, um dem Browser mitzuteilen, dass er die gewünschte Seite aufrufen soll:

driver.get("https://opensea.io/category/gaming")

Ihre scraper.py-Datei sollte nun diese Zeilen enthalten:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service

# Create a Chrome web driver instance
driver = webdriver.Chrome(service=Service())

# To avoid the responsive rendering
driver.maximize_window()

# Visit the target page
driver.get("https://opensea.io/category/gaming")

# Scraping logic...

# close the browser and release its resources
driver.quit()

Setzen Sie einen Debugging-Haltepunkt in der letzten Zeile des Skripts und führen Sie es aus. Das sollten Sie nun sehen:

Das Chrome-Fenster von Selenium

Die Meldung “Chrome wird von automatisierter Testsoftware gesteuert” bestätigt, dass Selenium Chrome wie erwartet steuert. Gut gemacht!

Schritt #5: Interaktion mit der Webseite

Standardmäßig werden auf der Seite “Spiele” die “aktuellen” NFT-Sammlungen angezeigt:

Beachten Sie, dass die Standardliste "Trending" ist.

Denken Sie daran, dass Sie an der “Top”-NFT-Sammlung interessiert sind. Mit anderen Worten, Sie möchten Ihren OpenSea Scraper anweisen, auf die Schaltfläche “Top” zu klicken, wie unten dargestellt:

Klicken Sie auf die Schaltfläche "Oben".

Untersuchen Sie zunächst die Schaltfläche “Oben”, indem Sie mit der rechten Maustaste darauf klicken und die Option “Untersuchen” wählen:

Der DevTools-Bereich für die Schaltfläche "Oben".

Beachten Sie, dass Sie es mit dem CSS-Selektor [value="top"] auswählen können. Verwenden Sie find_element() von Selenium, um diesen CSS-Selektor auf die Seite anzuwenden. Sobald Sie das Element ausgewählt haben, klicken Sie es mit click() an:

top_element = driver.find_element(By.CSS_SELECTOR, "[value="top"]")
top_element.click()

Damit der obige Code funktioniert, vergessen Sie nicht, den By-Import hinzuzufügen:

from selenium.webdriver.common.by import By

Großartig! Mit diesen Codezeilen wird die gewünschte Interaktion simuliert.

Schritt #6: Vorbereiten der NFT-Sammlungen

Die Zielseite zeigt die 10 wichtigsten NFT-Sammlungen für die ausgewählte Kategorie an. Da es sich um eine Liste handelt, initialisieren Sie ein leeres Array, um die ausgewerteten Informationen zu speichern:

nft_collections = []

Als Nächstes untersuchen Sie ein HTML-Element für einen NFT-Sammlungseintrag:

Der DevTools-Abschnitt für das NFT-Sammelobjekt

Beachten Sie, dass Sie alle Einträge der NFT-Sammlung mit dem CSS-Selektor a[data-id="Item"] auswählen können. Da einige Klassennamen in den Elementen zufällig generiert zu sein scheinen, sollten Sie sie nicht direkt ansprechen. Konzentrieren Sie sich stattdessen auf data-*-Attribute, da diese in der Regel für Tests verwendet werden und im Laufe der Zeit konsistent bleiben.

Abrufen aller NFT-Sammlungseintragselemente mit find_elements():

item_elements = driver.find_elements(By.CSS_SELECTOR, "a[data-id="Item"]")

Als Nächstes durchlaufen Sie die Elemente und bereiten die Extraktion der Daten aus jedem einzelnen Element vor:

for item_element in item_elements:
    # Scraping logic...

Großartig! Sie können nun mit dem Scraping von Daten aus OpenSea NFT-Elementen beginnen.

Schritt #7: Scrapen Sie die NFT-Sammelelemente

Prüfen Sie einen NFT-Sammlungseintrag:

Der HTML-Code des NFT-Sammelartikels (Teil 1)

Die HTML-Struktur ist ziemlich kompliziert, aber Sie können die folgenden Details entnehmen:

  • Das Sammlungsbild von img[alt="Sammlungsbild"]
  • Der Sammlungsrang von [data-id="TextBody"]
  • Der Name der Sammlung von [tabindex="-1"]

Leider gibt es für diese Elemente keine eindeutigen oder stabilen Attribute, so dass Sie sich auf potenziell unsichere Selektoren verlassen müssen. Beginnen Sie mit der Implementierung der Scraping-Logik für diese ersten drei Attribute:

image_element = item_element.find_element(By.CSS_SELECTOR, "img[alt="Collection Image"]")
image = image_element.get_attribute("src")

rank_element = item_element.find_element(By.CSS_SELECTOR, "[data-id="TextBody"]")
rank = int(rank_element.text)

name_element = item_element.find_element(By.CSS_SELECTOR, "[tabindex="-1"]")
name = name_element.text

Die Eigenschaft .text ruft den Textinhalt des ausgewählten Elements ab. Da der Rang später zum Sortieren der gescrapten Daten verwendet wird, wird er in eine ganze Zahl umgewandelt. In der Zwischenzeit ruft .get_attribute("src") den Wert des src-Attributs ab und extrahiert die Bild-URL.

Konzentrieren Sie sich dann auf die Spalten .w-1/5:

Der HTML-Code des NFT-Sammelartikels (Teil 2)

Die Daten sind wie folgt strukturiert:

  • Die erste Spalte .w-1/5 enthält den Mindestpreis.
  • Die zweite Spalte .w-1/5 enthält das Volumen und die prozentuale Veränderung, jeweils in separaten Elementen.

Extrahieren Sie diese Werte nach der folgenden Logik:

floor_price_element = item_element.find_element(By.CSS_SELECTOR, ".w-1\/5")
floor_price = floor_price_element.text

volume_column = item_element.find_elements(By.CSS_SELECTOR, ".w-1\/5")[1]

volume_element = volume_column.find_element(By.CSS_SELECTOR, "[tabindex="-1"]")
volume = volume_element.text

percentage_element = volume_column.find_element(By.CSS_SELECTOR, ".leading-sm")
percentage = percentage_element.text 

Beachten Sie, dass Sie .w-1/5 nicht direkt verwenden können, sondern dass Sie / mit \ abschließen müssen.

Jetzt geht’s los! Die OpenSea-Scraping-Logik zum Abrufen von NFT-Sammlungen ist abgeschlossen.

Schritt Nr. 8: Sammeln der gescrapten Daten

Sie haben die ausgewerteten Daten auf mehrere Variablen verteilt. Füllen Sie ein neues nft_collection-Objekt mit diesen Daten:

nft_collection = {
    "rank": rank,
    "image": image,
    "name": name,
    "floor_price": floor_price,
    "volume": volume,
    "percentage": percentage
}

Vergessen Sie dann nicht, sie dem Array nft_collections hinzuzufügen:

nft_collections.append(nft_collection)

Außerhalb der for-Schleife sortieren Sie die ausgewerteten Daten in aufsteigender Reihenfolge:

nft_collections.sort(key=lambda x: x["rank"])

Fantastisch! Es bleibt nur noch, diese Informationen in eine für Menschen lesbare Datei wie CSV zu exportieren.

Schritt #9: Exportieren Sie die gescrapten Daten in CSV

Python verfügt über integrierte Unterstützung für den Export von Daten in Formate wie CSV. Erreichen Sie dies mit diesen Codezeilen:

csv_filename = "nft_collections.csv"
with open(csv_filename, mode="w", newline="", encoding="utf-8") as file:
    writer = csv.DictWriter(file, fieldnames=nft_collections[0].keys())
    writer.writeheader()
    writer.writerows(nft_collections)

Dieses Snippet exportiert die gesammelten Daten aus der Liste nft_collections in eine CSV-Datei namens nft_collections.csv. Es verwendet das csv-Modul von Python, um ein Writer-Objekt zu erstellen, das die Daten in ein strukturiertes Format schreibt. Jeder Eintrag wird als Zeile mit Spaltenüberschriften gespeichert, die den Wörterbuchschlüsseln in der nft_collections-Liste entsprechen.

Importieren Sie csv aus der Python-Standardbibliothek mit:

imprort csv

Schritt Nr. 10: Alles zusammenfügen

Dies ist der endgültige Code für Ihren OpenSea Scraper:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import csv

# Create a Chrome web driver instance
driver = webdriver.Chrome(service=Service())

# To avoid the responsive rendering
driver.maximize_window()

# Visit the target page
driver.get("https://opensea.io/category/gaming")

# Select the "Top" NFTs
top_element = driver.find_element(By.CSS_SELECTOR, "[value="top"]")
top_element.click()

# Where to store the scraped data
nft_collections = []

# Select all NFT collection HTML elements
item_elements = driver.find_elements(By.CSS_SELECTOR, "a[data-id="Item"]")
# Iterate over them and scrape data from them
for item_element in item_elements:
    # Scraping logic
    image_element = item_element.find_element(By.CSS_SELECTOR, "img[alt="Collection Image"]")
    image = image_element.get_attribute("src")

    rank_element = item_element.find_element(By.CSS_SELECTOR, "[data-id="TextBody"]")
    rank = int(rank_element.text)

    name_element = item_element.find_element(By.CSS_SELECTOR, "[tabindex="-1"]")
    name = name_element.text

    floor_price_element = item_element.find_element(By.CSS_SELECTOR, ".w-1\/5")
    floor_price = floor_price_element.text

    volume_column = item_element.find_elements(By.CSS_SELECTOR, ".w-1\/5")[1]

    volume_element = volume_column.find_element(By.CSS_SELECTOR, "[tabindex="-1"]")
    volume = volume_element.text

    percentage_element = volume_column.find_element(By.CSS_SELECTOR, ".leading-sm")
    percentage = percentage_element.text

    # Populate a new NFT collection object with the scraped data
    nft_collection = {
        "rank": rank,
        "image": image,
        "name": name,
        "floor_price": floor_price,
        "volume": volume,
        "percentage": percentage
    }
    # Add it to the list
    nft_collections.append(nft_collection)

# Sort the collections by rank in ascending order
nft_collections.sort(key=lambda x: x["rank"])

# Save to CSV
csv_filename = "nft_collections.csv"
with open(csv_filename, mode="w", newline="", encoding="utf-8") as file:
    writer = csv.DictWriter(file, fieldnames=nft_collections[0].keys())
    writer.writeheader()
    writer.writerows(nft_collections)

# close the browser and release its resources
driver.quit()

Et voilà! In weniger als 100 Zeilen Code können Sie ein einfaches Python-Skript zum Scannen von OpenSea erstellen.

Starten Sie es mit dem folgenden Befehl im Terminal:

python scraper.py

Nach einiger Zeit erscheint die Datei nft_collections.csv im Projektordner:

Die ausgewerteten Daten im CSV-Format

Herzlichen Glückwunsch! Sie haben soeben OpenSea wie geplant gekratzt.

OpenSea-Daten mühelos freischalten

OpenSea bietet viel mehr als nur eine Rangliste der NFT-Sammlungen. Es bietet auch detaillierte Seiten für jede NFT-Sammlung und die einzelnen Artikel darin. Da die NFT-Preise häufig schwanken, muss Ihr Scraping-Skript automatisch und häufig laufen, um frische Daten zu erfassen. Die meisten OpenSea-Seiten sind jedoch durch strenge Anti-Scraping-Maßnahmen geschützt, was das Abrufen von Daten erschwert.

Wie wir bereits festgestellt haben, ist die Verwendung von Headless Browsern keine Option, was bedeutet, dass Sie Ressourcen verschwenden, um die Browserinstanz geöffnet zu halten. Wenn Sie versuchen, mit anderen Elementen auf der Seite zu interagieren, könnten Sie außerdem auf Probleme stoßen:

Die kontrollierte Seite kann ewig laden

Beispielsweise kann das Laden der Daten stecken bleiben, und die AJAX-Anfragen im Browser können blockiert werden, was zu einem 403 Forbidden-Fehler führt:

Die 403 blockierte AJAX-Anfrage

Dies geschieht aufgrund der fortschrittlichen Anti-Bot-Maßnahmen, die von OpenSea implementiert wurden, um Scraping-Bots zu blockieren.

Diese Probleme machen das Scrapen von OpenSea ohne die richtigen Werkzeuge zu einer frustrierenden Erfahrung. Die Lösung? Verwenden Sie den speziellen OpenSea Scraper von Bright Data, mit dem Sie Daten von der Website über einfache API-Aufrufe oder ohne Code abrufen können, ohne Gefahr zu laufen, gesperrt zu werden!

Schlussfolgerung

In diesem Schritt-für-Schritt-Tutorial haben Sie gelernt, was ein OpenSea Scraper ist und welche Arten von Daten er sammeln kann. Außerdem haben Sie ein Python-Skript zum Scrapen von OpenSea NFT-Daten erstellt, und das alles mit weniger als 100 Zeilen Code.

Die Herausforderung liegt in den strengen Anti-Bot-Maßnahmen von OpenSea, die automatisierte Browser-Interaktionen blockieren. Umgehen Sie diese Probleme mit unserem OpenSea Scraper, einem Tool, das Sie ganz einfach entweder mit API oder ohne Code integrieren können, um öffentliche NFT-Daten abzurufen, einschließlich Name, Beschreibung, Token-ID, aktueller Preis, letzter Verkaufspreis, Verlauf, Angebote und vieles mehr.

Erstellen Sie noch heute ein kostenloses Bright Data-Konto und nutzen Sie unsere Scraper-APIs!