Tony Wang5 Min. LesezeitESPN-Sportdaten scrapen 2026 (API & Python)
Drei Wege zu ESPN-Sportdaten 2026 — DIY Python, No-Code-Tools oder eine strukturierte API für Ergebnisse, Tabellen, Kader und Stats.
Der schnellste Weg, um 2026 an ESPN-Sportdaten zu kommen, ist eine strukturierte API, die Ergebnisse, Tabellen, Kader und Spielerstatistiken als normalisiertes JSON liefert. ESPN selbst läuft auf einer internen JSON-API, die etliche Open-Source-Projekte direkt reverse-engineeren — sie funktioniert, ist aber undokumentiert, inoffiziell und kann sich ohne Vorwarnung ändern. Dieser Guide behandelt den DIY-Weg, No-Code-Tools und eine strukturierte API, dazu die rechtliche Realität beim Scrapen von ESPN.
Warum ESPN scrapen?
ESPNs Daten — Ergebnisse, Tabellen, Kader, Statistiken, News — treiben eine erkennbare Reihe von Produkten an:
- Fantasy-Sports-Tools — Kader, Spielerstatistiken und Verletzungsberichte für Lineup- und Waiver-Wire-Entscheidungen.
- Wetten- und Odds-Vergleich — Spielpläne, Ergebnisse und Matchup-Kontext neben Odds-Daten.
- Sportnachrichten-Aggregation — Schlagzeilen und Ergebnisse in einem einzigen Feed zusammenführen.
- Fan- und Analytics-Apps — Score-Tracker, Tabellen-Widgets, historische Stat-Abfragen.
Ist es legal, ESPN zu scrapen?
ESPN ist eine Marke von Disney, und seine Nutzungsbedingungen verweisen auf Disneys Nutzungsbedingungen, die es ausdrücklich verbieten, „einen Roboter, Spider, ein Skript oder andere automatisierte Mittel" zu nutzen, um Produkte zu „aufzurufen, zu überwachen, zu kopieren oder zu extrahieren" — namentlich eingeschlossen sind Web-Scraping und Data-Mining. Die einzige Ausnahme ist die öffentliche Suchmaschinenindexierung, die robots.txt respektiert. ESPNs eigene robots.txt blockiert bekannte AI-Crawler-User-Agents rundheraus und schließt Admin-, Login- und mehrere parametrisierte/archivierte Pfade für alle anderen aus.
Das ist der rechtliche Hintergrund fürs direkte Scrapen von espn.com-Seiten. Ein großer Teil der realen „ESPN-API"-Nutzung zielt stattdessen auf ESPNs interne JSON-Endpoints (site.api.espn.com), die ESPNs eigene Apps antreiben und von Dritten breit dokumentiert sind — aber jede glaubwürdige Quelle stellt klar, dass es sich dabei um eine reverse-engineerte, inoffizielle Integration handelt, nicht um eine sanktionierte API, ohne eigene veröffentlichte Bedingungen. Behandle es entsprechend: völlig in Ordnung für private Projekte und Prototyping, aber nichts, worauf du ohne eigene rechtliche Prüfung ein kommerzielles Produkt aufbauen solltest. Siehe Is web scraping legal in 2026? für den allgemeinen Rahmen.
Option 1: DIY in Python (und warum es kaputtgeht)
Die meisten DIY-ESPN-Scraper überspringen HTML komplett und rufen direkt die undokumentierten JSON-Endpoints auf, die ESPNs eigene Website nutzt:
import requests
def get_scoreboard(sport="football", league="nfl"):
url = f"https://site.api.espn.com/apis/site/v2/sports/{sport}/{league}/scoreboard"
resp = requests.get(url, headers={"User-Agent": "Mozilla/5.0"})
resp.raise_for_status()
return resp.json()
Das funktioniert — bis es nicht mehr funktioniert. Die wiederkehrenden Fehlerquellen:
- Keine Dokumentation, keine Stabilitätsgarantie. Diese Endpoints sind aus ESPNs eigenem Web-/Mobile-Traffic reverse-engineert. Felder werden zwischen Deploys umbenannt, umstrukturiert oder entfernt — ganz ohne Changelog.
- Das Schema variiert je nach Sportart und Liga. Eine Fußball-Scoreboard-Response ist nicht identisch strukturiert wie eine NFL-Response — Code, der für
nflfunktioniert, kann beieng.1stillschweigend brechen. - User-Agent- und Rate-Limit-Blocking. Standard-
requests-artige Clients werden ohne Vorwarnung blockiert oder gedrosselt; es gibt kein dokumentiertes Rate-Limit, auf das man sein Design auslegen könnte. - Live-Daten brauchen Polling-Disziplin. Ergebnisse aktualisieren sich in Echtzeit ohne Push-Mechanismus — du bist selbst für Polling-Takt und Deduplizierung verantwortlich.
- HTML-Scraping ist noch schlechter. Wer stattdessen direkt
espn.com-Seiten scrapt, läuft direkt in das oben beschriebene Nutzungsbedingungen-Verbot — dazu kommen JS-gerenderte Live-Scoreboards, die einen Headless-Browser brauchen.
Option 2: No-Code-Tools
Generische Web-Scraper können ein einzelnes Scoreboard oder eine Tabelle für einen einmaligen Report ziehen. Für alles Laufende taugen sie nicht — kein Scheduling über Sportarten/Ligen hinweg, und darunter erben sie dieselbe Fragilität durch undokumentierte Schemata wie der DIY-Ansatz.
Option 3: Eine strukturierte ESPN-API
Eine gemanagte API normalisiert die Unterschiede zwischen Sportarten/Ligen und fängt den Schema-Drift ab, sodass derselbe Code für NFL, NBA, Premier League und mehr funktioniert:
curl -G "https://api.crawlora.net/api/v1/espn/scoreboard" \
-H "x-api-key: $CRAWLORA_API_KEY" \
--data-urlencode "sport=football" \
--data-urlencode "league=nfl"
import requests
resp = requests.get(
"https://api.crawlora.net/api/v1/espn/scoreboard",
headers={"x-api-key": "YOUR_API_KEY"},
params={"sport": "football", "league": "nfl"},
)
for game in resp.json()["data"]["games"]:
home, away = game["competitors"]
print(game["short_name"], game["status"]["detail"])
Beispiel-Response (Felder sind illustrativ — die vollständige Schema-Referenz findest du in den Docs):
{
"data": {
"sport": "football",
"league": "nfl",
"season": { "year": 2026, "type": 2, "name": "Regular Season" },
"count": 14,
"games": [
{
"id": "401547439",
"date": "2026-09-08T17:00Z",
"short_name": "KC @ BAL",
"status": { "state": "pre", "detail": "Sun 1:00 PM", "completed": false },
"venue": "M&T Bank Stadium",
"competitors": [
{ "team": { "id": "33", "abbreviation": "BAL", "display_name": "Baltimore Ravens" }, "home_away": "home", "score": null },
{ "team": { "id": "12", "abbreviation": "KC", "display_name": "Kansas City Chiefs" }, "home_away": "away", "score": null }
]
}
]
}
}
Kader, einzelne Athleten und Tabellen folgen demselben sport/league-Muster:
curl -G "https://api.crawlora.net/api/v1/espn/team-roster" \
-H "x-api-key: $CRAWLORA_API_KEY" \
--data-urlencode "sport=basketball" \
--data-urlencode "league=nba" \
--data-urlencode "team=lal"
resp = requests.get(
"https://api.crawlora.net/api/v1/espn/standings",
headers={"x-api-key": "YOUR_API_KEY"},
params={"sport": "baseball", "league": "mlb", "season": 2026},
)
for group in resp.json()["data"]["groups"]:
print(group["name"], [e["team"]["abbreviation"] for e in group["entries"]])
Welchen Ansatz solltest du wählen?
| DIY Python | No-Code-Tools | Strukturierte API | |
|---|---|---|---|
| Setup-Zeit | Minuten für den Call, laufender Aufwand, um es am Laufen zu halten | Minuten | Minuten |
| Wartung | Hoch — undokumentierte Schema-Änderungen ohne Vorwarnung | Keine (gleiche Fragilität darunter) | Keine — der Anbieter kümmert sich darum |
| Sportartenübergreifende Normalisierung | Baust du selbst pro Sportart/Liga | Selten angeboten | Eingebaut |
| Am besten für | Prototyping, private Projekte | Einen einmaligen schnellen Export | Laufende Produkte und Pipelines |
Was du sammeln kannst
- Ergebnisse und Spielpläne — Live- und anstehende Spiele über Football, Basketball, Baseball, Eishockey und Fußball hinweg
- Tabellen — Division-/Conference-Tabellen nach Saison
- Kader und Athleten — Spielerdetails, Position, Trikotnummer, Erfahrung
- Spieldetails — Boxscores und, wo verfügbar, Odds
- News — Schlagzeilen und Artikel-Links pro Sportart/Liga
Grenzen und typische Herausforderungen
- Undokumentiert bleibt undokumentiert. Jede Quelle, die ESPNs interne API behandelt, sagt dasselbe: kein SLA, kein Changelog, keine Garantie, dass sie nächsten Monat noch gleich aussieht.
- Die Abdeckung variiert je nach Liga. Rankings und einige Detail-Endpoints decken nur bestimmte Sportarten/Ligen ab (z. B. College-Football-/Basketball-Polls).
- Keine offiziellen kommerziellen Bedingungen. Es gibt kein veröffentlichtes Rate-Limit oder eine Lizenz für die reverse-engineerten Endpoints — plane entsprechend.
- Die Aktualität von Live-Scores basiert auf Polling, nicht auf Push — plane dein Refresh-Intervall danach, wie zeitkritisch dein Use Case ist.
Wo das eingesetzt wird
Kombiniere ESPNs strukturierte Stats mit SofaScore für breitere internationale Fußball-Abdeckung, oder mit Google Trends, um das Suchinteresse am Spieltag mit den tatsächlichen Ergebnissen abzugleichen. Die vollständige ESPN-API-Referenz zeigt alle verfügbaren Endpoints.
Sources
Leg los mit dem Sammeln
Teste die ESPN-Endpoints im Playground, lies das vollständige Schema in den API-Docs und wirf einen Blick auf die Credit-Kosten auf der Pricing-Seite. Für verwandte Guides siehe how to scrape SofaScore für dieselben Live-Ergebnisse und Tabellen mit tieferer globaler Fußball-Abdeckung, how to scrape MLB für die Spielpläne und Boxscores einer einzelnen Liga in voller Tiefe, how to scrape Google Trends und Is web scraping legal in 2026?.
Teil unserer how-to-scrape-Guide-Serie — jede Plattform, die wir abdecken, an einem Ort.
Häufig gestellte Fragen
Does ESPN have an official public API?
No. ESPN does not publish a public developer API. Its site and apps run on an internal JSON API (site.api.espn.com) that developers have reverse-engineered and widely documented, but it's unofficial, undocumented, and can change shape without notice — there's no changelog or SLA for outside developers.
Is it legal to scrape ESPN?
ESPN's Terms of Use route to Disney's Terms of Use, which explicitly ban automated access, monitoring, and scraping — including via ESPN's own undocumented JSON endpoints, which have no published terms of their own. Treat this as a Terms violation on paper; review your own legal exposure before commercial use. Not legal advice.
Can I scrape ESPN without getting blocked?
Default User-Agents and sustained request volume against ESPN's undocumented endpoints get throttled or blocked without documentation to design around. A structured API handles headers, rate limiting, and schema normalization across sports and leagues behind one key.
What sports and leagues are covered?
Football (NFL, college football), basketball (NBA, WNBA, men's and women's college), baseball (MLB), hockey (NHL), and major soccer leagues (Premier League, La Liga, Serie A, Bundesliga, Ligue 1, MLS, Champions League) — each addressed by a sport and league parameter on the same set of endpoints.
What ESPN data can I collect?
Scoreboards and schedules, standings by division/conference, team detail and rosters, individual athlete profiles, game summaries with box scores and odds where available, college football/basketball rankings, and news headlines — all per sport and league.
How current are the scores?
As current as the moment you call the scoreboard or game-summary endpoint — there's no push/websocket feed, so live coverage means polling on an interval that matches how fast you need updates.
Can I use ESPN odds data for a betting product?
Game-summary odds are informational market context sourced from ESPN's own data, not a licensed odds feed — treat it as research color, and get your own legal and licensing review before building a wagering product on it.