Eine Web Scraping API übernimmt für Sie die mühsamen Teile beim Sammeln von Webseiten: Sie wählt den Proxy aus, startet bei Bedarf den Browser, wiederholt Fehlschläge und liefert das HTML oder die Daten zurück, nach denen Sie gefragt haben. Sie senden eine Anfrage mit einer URL; der Dienst kümmert sich um alles dazwischen.
Dieser Leitfaden führt Sie von Ihrer ersten Anfrage zu einem kleinen, zuverlässigen Scraper, am Beispiel von Shifters Web Scraping API. Die Schritte und Muster sind bei den meisten Diensten dieser Art gleich. Wenn Sie zunächst den Hintergrund verstehen möchten, was hinter der Anfrage passiert, erklärt unser Artikel wie eine Web Scraping API funktioniert das genauer.
Schritt 1: einen API-Key besorgen
Jede Anfrage wird mit einem API-Key authentifiziert. Öffnen Sie in Shifters Panel Web Scraping API, dann API Keys, und kopieren Sie einen aktiven Key.
Halten Sie den Key aus Ihrem Code heraus. Speichern Sie ihn in einer Umgebungsvariable, damit er niemals in einem Repository oder Screenshot landet:
export SHIFTER_SCRAPER_KEY="your-key-here"
Schritt 2: Ihre erste Anfrage stellen
Die API ist ein einzelner Endpoint, https://scrape.shifter.io/v1. Übergeben Sie Ihren Key und die gewünschte Seite als Query-Parameter:
curl "https://scrape.shifter.io/v1?api_key=$SHIFTER_SCRAPER_KEY&url=https://example.com"
Die Antwort ist das HTML der Seite, abgerufen über die Proxies der API. Mehr braucht eine einfache Anfrage nicht.
Schritt 3: JavaScript-Rendering aktivieren, wenn die Seite es braucht
Viele moderne Websites senden eine nahezu leere Seite und bauen den Inhalt im Browser mit JavaScript auf. Wenn im zurückgegebenen HTML die Daten fehlen, die Sie in Ihrem Browser sehen können, fügen Sie render_js=1 hinzu. Die API lädt die Seite dann in einem Headless-Browser und gibt das gerenderte Ergebnis zurück. Bei Shifter kostet eine gerenderte Anfrage genauso viel wie eine einfache.
Zwei verwandte Einstellungen helfen bei langsamen Seiten:
wait_for_csswartet, bis ein bestimmtes Element erscheint, bevor zurückgegeben wird, damit Sie die Seite nicht erhalten, bevor ihre Daten geladen sind.timeoutgibt langsamen Websites mehr Zeit.
Rendering ist langsamer als ein einfacher Abruf, verwenden Sie es daher nur für Seiten, die es brauchen. Unser Leitfaden zum Scraping von JavaScript-lastigen Websites erklärt, wie man das erkennt.
Schritt 4: JSON statt HTML erhalten
HTML selbst zu parsen ist die häufigste Fehlerquelle bei Scrapern. Beschreiben Sie stattdessen die gewünschten Felder mit extract_rules: ein JSON-Objekt, das jeden Feldnamen auf einen CSS-Selektor und das abzurufende Ergebnis abbildet.
output | Gibt zurück |
|---|---|
text | Den Text des Elements |
html | Das innere HTML des Elements |
@href, @src und so weiter | Den Wert eines Attributs |
Zum Beispiel liefert {"title": {"selector": "h1", "output": "text"}} für example.com {"title": "Example Domain"}. Viele Seiten betten ihre Daten bereits als strukturiertes JSON ein; unser Leitfaden zum Extrahieren von JSON-LD statt HTML zu parsen zeigt, wie man das nutzt.
Schritt 5: Fehler richtig behandeln
Jeder Scraper trifft auf Fehlschläge: langsame Websites, Seiten, die sich nicht rendern lassen, zu viele gleichzeitige Anfragen. Die API teilt Ihnen über den Statuscode mit, was schiefgelaufen ist, und die richtige Reaktion hängt davon ab, welchen Sie erhalten:
| Status | Bedeutung | Was zu tun ist |
|---|---|---|
200 | Erfolg | Antwort verwenden |
400, 401, 403 | Ein Problem mit Ihrer Anfrage, Ihrem Key oder Ihren Plan-Funktionen | Beheben; ein erneuter Versuch hilft nicht |
408 | Die Zielwebsite hat ein Timeout ausgelöst | Erneut versuchen, eventuell mit höherem timeout |
422 | Die Seite konnte nicht gerendert werden | Erneut versuchen; prüfen, ob die Website im normalen Browser funktioniert |
429 | Zu viele gleichzeitige Anfragen für Ihren Plan | Warten, dann erneut versuchen |
500 | Ein interner Fehler | Nach kurzer Verzögerung erneut versuchen |
Bei Shifter werden fehlgeschlagene Anfragen nicht berechnet; Sie zahlen ein Credit pro erfolgreicher Antwort. Die API wiederholt intern auch einige Fehlschläge, bevor sie antwortet, und diese zählen als ein Aufruf.
Alles zusammenfügen
Hier ist ein kleiner Python-Helfer, der alle fünf Schritte umschließt: Er liest den Key aus der Umgebung, fügt auf Wunsch Rendering und Extraktion hinzu, wiederholt die Fehler, bei denen sich das lohnt, mit wachsender Pause, und bricht sofort bei denen ab, die eine Korrektur erfordern.
import json
import os
import time
import requests
API = "https://scrape.shifter.io/v1"
RETRY = {408, 422, 429, 500} # worth another try after a pause
STOP = {400, 401, 403} # fix the request; retrying will not help
def scrape(url, render_js=False, extract_rules=None, attempts=3, session=None, wait=2.0):
"""Fetch one page through the Web Scraping API; returns text, or parsed JSON with extract_rules."""
session = session or requests.Session()
params = {"api_key": os.environ["SHIFTER_SCRAPER_KEY"], "url": url}
if render_js:
params["render_js"] = 1
if extract_rules:
params["extract_rules"] = json.dumps(extract_rules)
for attempt in range(1, attempts + 1):
response = session.get(API, params=params, timeout=120)
if response.status_code == 200:
return response.json() if extract_rules else response.text
if response.status_code in STOP or attempt == attempts or response.status_code not in RETRY:
raise RuntimeError(f"{url}: HTTP {response.status_code} {response.text[:200]}")
time.sleep(wait * attempt) # back off a little more each time
Verwendung:
from scrape_api import scrape
html = scrape("https://example.com")
data = scrape("https://example.com", extract_rules={"title": {"selector": "h1", "output": "text"}})
print(data["title"])
Wir haben den Aufbau der Anfragen, die Wiederholungen und die Abbruchbedingungen des Helfers gegen simulierte Antworten für jeden der oben genannten Statuscodes getestet.
Wenn Ihnen Retry-Logik neu ist, erklärt unser Leitfaden zu Retry und Backoff für Web Scraper, warum die Pause mit jedem Versuch wächst.
Schritt 6: skalieren
Sobald einzelne Anfragen funktionieren, zählen beim Wachsen drei Dinge:
- Nebenläufigkeit. Senden Sie mehrere Anfragen gleichzeitig mit einem Thread-Pool oder einem asynchronen Client. Jeder Plan hat ein Nebenläufigkeitslimit (20 bis 500 gleichzeitige Anfragen bei Shifter, je nach Plan); bleiben Sie darunter und behandeln Sie
429als Signal zum Verlangsamen. - Standort und Proxy-Typ. Nutzen Sie den Parameter
country, um eine Seite so abzurufen, wie sie in einem bestimmten Land erscheint. Ab Growth-Plänen leitetpremium_proxyAnfragen über residenzielle IPs für Websites, die Datacenter-Traffic blockieren. - Sessions. Für mehrstufige Abläufe hält eine
session_iddieselbe IP und Cookies über mehrere Anfragen hinweg bei.
Wenn die Daten zu fließen beginnen, speichern Sie sie an einem Ort, den Sie abfragen können. Unser Leitfaden zum Überführen von Web Scraping API-Daten in SQL beschreibt eine saubere Pipeline von der Antwort bis zur Tabelle.
Häufige Anfängerfehler
- Den API-Key fest in den Code schreiben. Nutzen Sie eine Umgebungsvariable oder einen Secrets-Manager.
- Alles rendern. Versuchen Sie zuerst eine einfache Anfrage; rendern Sie nur Seiten, die es brauchen.
- Alles wiederholen. Ein
401wird nie erfolgreich sein. Wiederholen Sie nur Fehler, die später erfolgreich sein können. - HTML von Hand parsen. Nutzen Sie, wo möglich, Extraktionsregeln oder eingebettetes JSON.
- Nebenläufigkeitslimits ignorieren. Zu viele parallele Anfragen erzeugen
429-Fehler, keine Geschwindigkeit.
FAQ
Was ist eine Web Scraping API?
Ein Dienst, der für Sie Webseiten über eigene Proxies und Browser abruft, Wiederholungen und Blockaden handhabt und das HTML oder extrahierte Daten als Antwort auf eine einzelne Anfrage zurückgibt.
Muss ich programmieren können, um eine Web Scraping API zu nutzen?
Ein wenig. Eine einzelne Anfrage funktioniert von der Kommandozeile aus mit curl, aber die meisten echten Projekte verwenden ein kurzes Skript in Python oder einer anderen Sprache, um Anfragen zu senden, Fehler zu behandeln und die Ergebnisse zu speichern.
Wann sollte ich JavaScript-Rendering aktivieren?
Wenn im ohne Rendering zurückgegebenen HTML Inhalte fehlen, die Sie in Ihrem Browser sehen können. Viele Websites bauen ihre Seiten mit JavaScript auf, und Rendering gibt die Seite so zurück, wie ein Browser sie anzeigen würde.
Kosten fehlgeschlagene Anfragen Credits?
Bei Shifter nicht. Sie zahlen ein Credit pro erfolgreicher Antwort, und fehlgeschlagene Anfragen, einschließlich Fehlern der Zielwebsite, sind kostenlos.
Fazit
Die Nutzung einer Web Scraping API läuft auf ein paar Gewohnheiten hinaus: den Key in der Umgebung halten, mit einfachen Anfragen beginnen und Rendering nur dort hinzufügen, wo nötig, JSON mit Extraktionsregeln anfordern statt HTML zu parsen, nur die Fehler wiederholen, die später erfolgreich sein können, und das Nebenläufigkeitslimit Ihres Plans respektieren. Der Helfer oben deckt all das in etwa zwanzig Zeilen ab. Pläne und Limits finden Sie auf der Preisseite der Web Scraping API.