So Scrapen Sie YouTube-Kanaldaten als JSON
Öffnen Sie einen beliebigen YouTube-Kanal, und die Zahlen, die Sie sehen, sind gerundet. Ein Video zeigt “1,2 Mio. Aufrufe”, ein Kanal zeigt “340 Tsd. Abonnenten”, und eine Kommentarzahl steht als “4,5 Tsd.” da. Für einen Menschen, der kurz auf die Seite schaut, ist das in Ordnung. Es ist nutzlos, wenn Sie ein Dashboard bauen, den Katalog eines Creators sortieren oder das Wachstum Woche für Woche verfolgen. Sie brauchen die exakten Zahlen, und Sie brauchen sie als strukturierte Daten, nicht als Text, der aus einer gerenderten Seite herausgekratzt wurde.
Diese Anleitung zeigt, wie Sie die vollständige Videoliste eines YouTube-Kanals mit exakten Zahlen, Videodauern und Veröffentlichungsdaten als sauberes JSON erhalten. Sie behandelt die offizielle YouTube Data API, wo sie Ihnen im Weg steht, und wie Sie den ganzen Aufwand überspringen, wenn Sie einfach nur die Daten wollen.
Warum die Zahlen auf der Seite Gerundet Sind
YouTube kürzt öffentliche Zahlen mit Absicht ab. Die Wiedergabeseite und die Kanalseite sind auf Lesbarkeit ausgelegt, also wird aus 1.234.567 ein “1,2 Mio.”. Abonnentenzahlen werden noch stärker gerundet: Seit 2019 veröffentlicht YouTube sie mit drei signifikanten Stellen, sodass “340 Tsd.” alles zwischen 340.000 und 340.999 sein könnte.
Wenn Sie diese Zeichenketten direkt aus dem HTML scrapen, erben Sie die Rundung. Schlimmer noch, Sie erben sie inkonsistent. Derselbe Kanal kann an einer Stelle “1,2 Mio.” und in einem Tooltip “1.234.567” anzeigen, und das Markup um diese Werte herum ändert sich häufig. Abgekürzten Text in echte Ganzzahlen umzuwandeln (“2,4 Mio.” zu 2.400.000) verwirft zudem eine Genauigkeit, die Sie nie zurückbekommen.
Die exakten Zahlen existieren durchaus. Sie stehen nur nicht im menschenlesbaren Text. Um sie zuverlässig zu lesen, gehen Sie zu einer Datenquelle, die für Maschinen gebaut ist.
Option 1: Die YouTube Data API
Google veröffentlicht die YouTube Data API v3, und sie ist der richtige Ausgangspunkt. Sie liefert exakte viewCount, likeCount und commentCount für Videos sowie Statistiken auf Kanalebene. So sieht die Arbeit aus.
Besorgen Sie sich einen API-Schlüssel
Legen Sie ein Projekt in der Google Cloud Console an, aktivieren Sie die YouTube Data API v3 und erzeugen Sie einen API-Schlüssel. Öffentliche, nur lesbare Daten brauchen kein OAuth, also reicht ein einfacher Schlüssel für den Anfang.
Lösen Sie den Kanal auf
Sie brauchen die Kanal-ID (sie beginnt mit UC...). Wenn Sie nur ein Handle wie @kanalname haben, rufen Sie channels.list mit forHandle auf, um es aufzulösen. Derselbe Aufruf liefert die gewünschten Kanalstatistiken:
import requests
API_KEY = "IHR_SCHLUESSEL"
BASE = "https://www.googleapis.com/youtube/v3"
def get_channel(handle):
r = requests.get(f"{BASE}/channels", params={
"part": "snippet,statistics,contentDetails",
"forHandle": handle,
"key": API_KEY,
})
r.raise_for_status()
item = r.json()["items"][0]
stats = item["statistics"]
uploads = item["contentDetails"]["relatedPlaylists"]["uploads"]
return {
"channelId": item["id"],
"title": item["snippet"]["title"],
"subscriberCount": int(stats.get("subscriberCount", 0)),
"videoCount": int(stats["videoCount"]),
"viewCount": int(stats["viewCount"]),
"uploadsPlaylist": uploads,
}
Beachten Sie, dass subscriberCount selbst aus der API gerundet zurückkommt. Das ist eine Richtlinie von Google, keine Einschränkung des Scrapings. Die Aufrufzahlen der Videos hingegen sind exakt.
Blättern Sie durch die Uploads
Jeder Kanal hat eine versteckte “Uploads”-Playlist, die alle öffentlichen Videos enthält. Durchlaufen Sie sie mit playlistItems.list, sammeln Sie die Video-IDs und fassen Sie sie in Stapeln in videos.list zusammen (bis zu 50 pro Aufruf), um Statistiken und Dauern zu lesen:
def get_video_ids(uploads_playlist, limit=200):
ids, page = [], None
while len(ids) < limit:
r = requests.get(f"{BASE}/playlistItems", params={
"part": "contentDetails",
"playlistId": uploads_playlist,
"maxResults": 50,
"pageToken": page,
"key": API_KEY,
})
data = r.json()
ids += [i["contentDetails"]["videoId"] for i in data["items"]]
page = data.get("nextPageToken")
if not page:
break
return ids[:limit]
def get_videos(video_ids):
out = []
for i in range(0, len(video_ids), 50):
chunk = video_ids[i:i + 50]
r = requests.get(f"{BASE}/videos", params={
"part": "snippet,statistics,contentDetails",
"id": ",".join(chunk),
"key": API_KEY,
})
for v in r.json()["items"]:
s, c = v["statistics"], v["contentDetails"]
out.append({
"id": v["id"],
"title": v["snippet"]["title"],
"publishedAt": v["snippet"]["publishedAt"],
"duration": c["duration"], # ISO-8601, z. B. PT12M30S
"viewCount": int(s.get("viewCount", 0)),
"likeCount": int(s.get("likeCount", 0)),
"commentCount": int(s.get("commentCount", 0)),
})
return out
Das liefert Ihnen exakte Zahlen. Der Haken ist das Feld duration: Es kommt als ISO-8601-Zeichenkette wie PT12M30S zurück, nicht in Sekunden. Sie wandeln es selbst mit der Bibliothek isodate oder einem kleinen Parser um.
Behalten Sie das Kontingent im Auge
Hier beißt die Data API. Jedes Projekt bekommt standardmäßig 10.000 Kontingenteinheiten pro Tag. Ein videos.list- oder playlistItems.list-Aufruf kostet 1 Einheit, was großzügig klingt, bis Sie Hunderte von Kanälen durchblättern. Und search.list (das Sie vielleicht zum Finden von Kanälen nutzen) kostet 100 Einheiten pro Aufruf, sodass ein paar hundert Suchen den ganzen Tag aufbrauchen.
Für einen einzelnen Kanal reicht das kostenlose Kontingent locker. Um Tausende von Kanälen nach Zeitplan zu überwachen, beantragen Sie entweder eine Kontingenterhöhung bei Google (ein Formular und eine Prüfung) oder verteilen die Anfragen über mehrere Tage. Keine der beiden Optionen macht Spaß, wenn Sie eine Deadline haben.
Option 2: Überspringen Sie die Einrichtung und Erhalten Sie JSON Direkt
Wenn Sie kein Google-Cloud-Projekt, keinen API-Schlüssel, keine Kontingentrechnerei und keine eigene Paginierungsschleife wollen, können Sie ein Kanal-Handle oder eine Kanal-URL an eine Scraping-API übergeben und dieselben strukturierten Daten in einem einzigen Aufruf zurückbekommen.
Der youtube-channel-Endpunkt von ScrapeUnblocker liest die Uploads eines Kanals und liefert jedes Video mit exakten viewCount, likeCount und commentCount, einer duration sowohl in ISO-8601 als auch als gebrauchsfertigem durationSeconds, der description und einem publishedAt-Zeitstempel. Die Kanalzusammenfassung enthält subscriberCount, videoCount, den gesamten viewCount und das Handle. Ein Parameter limit (1 bis 200) steuert, wie weit Sie über den ersten Stapel hinaus blättern.
import requests
resp = requests.post(
"https://api.scrapeunblocker.com/content/youtube-channel",
headers={"x-scrapeunblocker-key": "IHR_SCHLUESSEL"},
json={"channel": "@kanalname", "limit": 100},
)
data = resp.json()
print(data["channel"]["subscriberCount"], "Abonnenten")
for v in data["videos"]:
print(v["publishedAt"], v["durationSeconds"], v["viewCount"], v["title"])
Sie bekommen eine einzige JSON-Nutzlast mit den Kanalstatistiken und der bereits geparsten Videoliste, inklusive durationSeconds, sodass Sie die ISO-8601-Umwandlung überspringen. Es gibt kein Kontingent einzuplanen und keinen Schlüssel bei Google bereitzustellen. Wählen Sie das, wenn Sie Ihre Zeit lieber in die Analyse als in die API-Klempnerei stecken.
Was Sie mit den Daten Anfangen
Sobald Sie exakte Zahlen pro Video als JSON haben, beginnt die nützliche Arbeit:
- Einen Katalog sortieren. Sortieren Sie nach
viewCount, um die echten Hits eines Kanals zu finden, oder nach Aufrufen pro Tag seitpublishedAt, um Videos zu erkennen, die noch steigen. - Wachstum verfolgen. Speichern Sie den
viewCountundvideoCountdes Kanals nach Zeitplan und bilden Sie die Differenz, um die Dynamik zu messen, nicht Eitelkeitszahlen. - Interaktionsraten berechnen.
likeCount / viewCountundcommentCount / viewCountsind nur mit exakten Zahlen aussagekräftig. Gerundete Zahlen machen die Verhältnisse zu Rauschen. - Frequenz und Länge untersuchen. Gruppieren Sie
durationSecondsundpublishedAt, um zu sehen, ob die längeren oder kürzeren Videos eines Creators besser laufen und wie oft er veröffentlicht.
FAQ
Sind die Aufrufzahlen von YouTube-Videos exakt oder gerundet?
viewCount, likeCount und commentCount eines Videos aus der Data API sind exakte Ganzzahlen. Nur subscriberCount ist gerundet, auf drei signifikante Stellen, und das ist eine Google-Richtlinie, die für jede Art des Auslesens gilt.
Ist das Scrapen öffentlicher YouTube-Daten erlaubt? Das Lesen öffentlicher, nicht personenbezogener Daten wie öffentlicher Videostatistiken ist in der Regel risikoärmer als der Zugriff auf private oder personenbezogene Informationen, aber Sie sind weiterhin an die Nutzungsbedingungen von YouTube und an lokales Recht gebunden. Sammeln Sie nur öffentliche Daten, respektieren Sie Ratenlimits, und wenn Sie bei einer konkreten Nutzung Zweifel haben, holen Sie Rechtsrat ein.
Warum wird die Videodauer als PT12M30S zurückgegeben?
Das ist das ISO-8601-Dauerformat, das die YouTube Data API für duration nutzt. PT12M30S bedeutet 12 Minuten 30 Sekunden. Wandeln Sie es mit einer Bibliothek wie isodate in Sekunden um oder nutzen Sie eine Quelle, die bereits ein numerisches durationSeconds liefert.
Wie viele Videos kann ich aus einem Kanal ziehen?
Jedes öffentliche Video liegt in der versteckten “Uploads”-Playlist des Kanals, es gibt also keine feste Obergrenze außer, wie weit Sie blättern. Mit der Data API folgen Sie nextPageToken, bis es ausgeht; mit einem Scraping-Endpunkt setzen Sie ein limit (hier bis zu 200 pro Anfrage) und blättern von dort.
So Erhalten Sie Saubere YouTube-Daten
Die exakten Zahlen, die Sie wollen, stehen nie im gerundeten Text auf der Seite, also ist das Scrapen des HTML das falsche Werkzeug. Lesen Sie sie stattdessen aus einer strukturierten Quelle: der YouTube Data API, wenn Sie gerne Schlüssel und Kontingent verwalten, oder einer Scraping-API, wenn Sie lieber geparstes JSON in einem einzigen Aufruf bekommen.
Wenn Sie die Google-Cloud-Einrichtung und das ISO-8601-Parsen überspringen wollen, liefert ScrapeUnblocker die Videos eines Kanals mit exakten Zahlen, Dauern in Sekunden und Veröffentlichungsdaten als sauberes JSON. Sehen Sie sich die Dokumentation für die vollständige Antwortstruktur und die anderen Datenendpunkte an.
ScrapeUnblocker kostenlos testen
Über 95 % Erfolgsquote · ab 0,55 € pro 1.000 Aufrufe · 500 kostenlose Anfragen bei der Registrierung.