TikTok hat inzwischen rund , und Creator laden Schätzungen zufolge jeden Tag 23 Millionen Videos hoch. Wer schon einmal versucht hat, auch nur einen kleinen Teil dieser Datenflut einzufangen, kennt das Problem nur zu gut.
Typischerweise läuft es so ab: Du suchst nach „TikTok-Videos mit Python scrapen“, kopierst dir einen Code-Block aus einem Tutorial (oder lässt ihn dir von ChatGPT schreiben), führst ihn aus und bekommst … nichts. Leeres HTML. Einen 403-Fehler. Oder die berüchtigte Meldung „Process finished with exit code 0“ – aber ohne irgendeine Ausgabe. Genau diese Endlosschleife habe ich in unzähligen GitHub-Issues und Reddit-Threads gesehen. Deshalb habe ich diesen Leitfaden geschrieben. Wir zeigen dir drei Python-Methoden, die 2025 tatsächlich funktionieren, führen dich Schritt für Schritt durch das Herunterladen der echten .mp4-Videodateien (nicht nur Metadaten – dort hören fast alle anderen Tutorials auf) und geben dir am Ende eine Vergleichstabelle, damit du den passenden Ansatz für deinen Anwendungsfall findest. Falls du Python gar nicht brauchst, stelle ich dir außerdem No-Code-Alternativen wie vor, mit denen du dieselben Daten in etwa zwei Klicks bekommst.
Was bedeutet „TikTok-Videos scrapen“ eigentlich?
Bevor wir in den Code einsteigen, lohnt sich eine kurze Einordnung: Wenn von „TikTok-Videos scrapen“ die Rede ist, kann das zwei sehr unterschiedliche Dinge meinen:
- Videometadaten extrahieren: Captions, Hashtags, Like-Zahlen, Kommentarzahlen, Share-Zahlen, View-Zahlen, Veröffentlichungsdatum, Autoreninformationen. Darauf konzentrieren sich die meisten Tutorials.
- Die eigentlichen Videodateien (.mp4) herunterladen: Das Video selbst auf deinem Rechner speichern. Genau das wollen die meisten in Wahrheit, wenn sie nach „TikTok-Videos scrapen“ suchen – und genau diesen Teil erklärt fast niemand.
Dieser Leitfaden behandelt beides. Jede der folgenden Methoden kann Metadaten auslesen und dir gleichzeitig die Download-URLs liefern, die du zum Speichern der .mp4-Dateien brauchst.
Warum TikTok-Videos mit Python scrapen?
Bei und über durch TikTok Shop sind die geschäftlichen Gründe, TikTok-Daten zu nutzen, enorm. Die häufigsten Anwendungsfälle sind:
| Anwendungsfall | Was du ausliest | Für wen | |---|---|---| | Influencer- & Marketing-Analyse | Engagement-Raten, Follower-Zahlen, Content-Formate, Hashtag-Performance | Marketing-Teams, Agenturen | | Content-Strategie | Trend-Hashtags, virale Videoformate, Veröffentlichungsfrequenz | Creator, Social-Media-Manager | | Marken-Monitoring | Erwähnungen, Kampagnenreichweite, Stimmungsbild der Zielgruppe | Brand Manager, PR-Teams | | Wettbewerbsanalyse | Performance von Konkurrenzvideos, Ad Creatives, TikTok-Shop-Angebote | E-Commerce, Produktteams | | Marktforschung | Aufkommende Trends, Nutzerverhalten, Produktentdeckung | Analysten, Hedgefonds, Research-Firmen | | Archivierung & Compliance | Videodateien für interne Prüfung oder Dokumentation | Rechtsabteilung, Compliance, Agenturen |
Die wirtschaftliche Relevanz ist echt: Für die USA wird der TikTok-Werbeumsatz 2026 auf 23,4 Milliarden US-Dollar prognostiziert, und Affiliate-Creator erwirtschaften in den wichtigsten TikTok-Shop-Kategorien . Wer im E-Commerce oder Influencer-Marketing arbeitet, kann mit diesen Daten direkt Umsatz machen.
Warum dein einfaches Python-Skript auf TikTok scheitert
Wenn du so etwas schon ausprobiert und nichts erreicht hast, bist du in bester Gesellschaft:
1import requests
2from bs4 import BeautifulSoup
3resp = requests.get("https://www.tiktok.com/@someuser")
4soup = BeautifulSoup(resp.text, "html.parser")
5# ...und dann ist im HTML nichts Brauchbares zu finden
Der Grund ist einfach: TikTok gehört zu den schwierigsten Plattformen fürs Scraping. Ein normales requests.get() liefert oft nur eine leere HTML-Hülle, weil die Inhalte erst per JavaScript im Browser gerendert werden. Dazu kommt eine sehr aggressive Anti-Bot-Schutzschicht mit Verhaltensanalyse, TLS-Fingerprinting, einer für Request-Signaturen und dynamischen CSS-Selektoren, die sich ohne Vorwarnung ändern.

Laut dem Imperva 2025 Bad Bot Report übertraf automatisierter Traffic 2024 erstmals den menschlichen Traffic – Bots machen inzwischen aus. TikTok weiß das ganz genau und hat seine Schutzmechanismen entsprechend hochgefahren.
Hier ist eine kurze Diagnose-Tabelle, damit du schneller erkennst, was schiefläuft und welche Methode hilft:
| Symptom | Wahrscheinliche Ursache | Methode zur Lösung |
|---|---|---|
| Leeres HTML / keine Daten | JS-gerenderter Inhalt; requests kann kein JavaScript ausführen | Methode 1 (verstecktes JSON) oder Methode 3 (Playwright) |
| 403 / Zugriff verweigert | Fehlende oder falsche Header; Anti-Bot-Erkennung | Methode 1 mit korrekten Headern |
| Einmal funktioniert es, dann nicht mehr | Rate Limiting / IP-Block | Proxy-Rotation (alle Methoden) |
| Login-Sperre erscheint | Session-/Cookie-Pflicht | Methode 3 (Browser mit gespeicherter Session) |
| Von ChatGPT generierter Code liefert nichts | TikTok-Struktur hat sich seit den Trainingsdaten geändert | Alle 3 Methoden (aktuelle Ansätze) |
Die Rate-Limit-Schwelle liegt ungefähr bei 30–60 Requests pro Minute und IP, bevor Soft-Blocks oder CAPTCHAs auftauchen. Rechenzentrums-IPs werden oft innerhalb von Minuten auffällig – Residential- oder Mobile-Proxies sind für ernsthaften Umfang praktisch Pflicht.
Überblick: 3 Methoden, um TikTok-Videos mit Python zu scrapen
Hier ist der Fahrplan. Jede Methode hat andere Vor- und Nachteile, und ich zeige dir alle drei mit funktionierendem Code:
- Versteckte JSON-Extraktion — Den
__UNIVERSAL_DATA_FOR_REHYDRATION__-Script-Tag direkt aus der TikTok-Seite parsen. Am schnellsten, am einfachsten, kein Browser nötig. - TikToks interne API — Den undokumentierten Endpunkt
/api/post/item_list/direkt ansprechen, um große Datenmengen mit Cursor-basierter Pagination zu holen. - Browser-Automatisierung mit Playwright — Seiten in einem Headless-Browser rendern, um Infinite Scroll, dynamische Inhalte und Login-Sperren zu handhaben.
Alle drei Methoden können auch die tatsächlichen .mp4-Dateien herunterladen – wie das geht, zeige ich in einem eigenen Abschnitt nach den Methoden. Eine vollständige Vergleichstabelle findest du am Ende, damit du eine fundierte Entscheidung treffen kannst.
Methode 1: TikTok-Videos über verstecktes JSON scrapen (anfängerfreundlich)
Mit dieser Methode würde ich anfangen. TikTok bettet bei praktisch jedem Seitenaufruf einen riesigen JSON-Block in einen <script>-Tag mit der ID __UNIVERSAL_DATA_FOR_REHYDRATION__ ein. Dieser Block enthält alle Profil- und Videodaten, die das Frontend sonst per JavaScript anzeigen würde – du kannst sie also mit nur einem HTTP-Request abgreifen, ganz ohne Browser.
Was du brauchst
- Python 3.8+
requests(oderhttpx)beautifulsoup4(oderparsel)- Korrekte Header:
User-Agent,Referer,Accept-Language
Installation der Abhängigkeiten:
1pip install requests beautifulsoup4
Schritt für Schritt: TikTok-Videodaten aus dem Script-Tag extrahieren
Schritt 1: Eine GET-Anfrage mit realistischen Browser-Headern senden.
Hier scheitern die meisten Einsteiger. Wenn du einfach ein nacktes requests.get() ohne Header sendest, liefert TikTok einen 403 oder eine CAPTCHA-Seite. Du brauchst mindestens einen aktuellen Browser-User-Agent und einen Referer-Header.
1import requests
2from bs4 import BeautifulSoup
3import json
4url = "https://www.tiktok.com/@charlidamelio"
5headers = {
6 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
7 "Referer": "https://www.tiktok.com/",
8 "Accept-Language": "en-US,en;q=0.9",
9}
10resp = requests.get(url, headers=headers)
Schritt 2: HTML parsen und den Hydration-Script-Tag finden.
1soup = BeautifulSoup(resp.text, "html.parser")
2script_tag = soup.find("script", id="__UNIVERSAL_DATA_FOR_REHYDRATION__")
Wenn script_tag None ist, hat TikTok dich wahrscheinlich blockiert (Statuscode prüfen) oder die Tag-ID geändert (selten, aber möglich).
Schritt 3: Den Inhalt des Scripts als JSON laden.
1data = json.loads(script_tag.string)
Schritt 4: Zur JSON-Struktur navigieren und Videometadaten extrahieren.
Die Struktur liegt unter __DEFAULT_SCOPE__. Für eine Nutzerprofilseite:
1user_detail = data["__DEFAULT_SCOPE__"]["webapp.user-detail"]
2user_info = user_detail["userInfo"]
3# Profilstatistiken
4stats = user_info["stats"]
5print(f"Follower: {stats['followerCount']}, Likes: {stats['heartCount']}")
6# Videoliste (erste Seite der Videos)
7item_list = user_detail.get("itemList", [])
8for video in item_list:
9 print(video["desc"]) # Caption
10 print(video["stats"]["playCount"]) # Aufrufe
11 print(video["video"]["playAddr"]) # Download-URL des Videos (ohne Wasserzeichen)
12 print(video["video"]["downloadAddr"]) # Download-URL des Videos (mit Wasserzeichen)
Schritt 5: Video-Download-URLs extrahieren.
Das Feld playAddr liefert in der Regel eine sauberere Version des Videos (oft ohne TikTok-Wasserzeichen), während downloadAddr das Standard-Wasserzeichen enthält. Beide sind direkte URLs zur .mp4-Datei – allerdings brauchst du zum Herunterladen bestimmte Header (siehe Download-Abschnitt unten).
Jetzt solltest du eine Liste von Video-Objekten haben, die jeweils Caption, Statistiken, Erstellungszeit, Hashtags (in challenges[] und textExtra) sowie direkte Video-URLs enthalten.
Grenzen der Hidden-JSON-Methode
- Erfasst nur Daten vom ersten Seitenaufruf – meist die ersten ~30 Videos eines Profils
- Kann kein Infinite Scroll oder Pagination behandeln (es gibt keine „nächste Seite“, die man abrufen könnte)
- Wenn TikTok die Script-Tag-ID oder die JSON-Struktur ändert, bricht der Parser (das passiert regelmäßig – hilft, Fehler früh zu erkennen)
- Am besten geeignet für schnelle Profil-Checks, einmalige Datenabzüge oder wenn du nur die neuesten Videos brauchst
Methode 2: TikTok-Videos über die interne API scrapen
Das Frontend von TikTok lädt nicht alle Videos auf einmal – beim Scrollen werden XHR-Aufrufe an interne API-Endpunkte geschickt. Der wichtigste für Nutzer-Videos ist /api/post/item_list/. Diesen Endpunkt kannst du direkt aus Python aufrufen und erhältst Cursor-basierte Pagination sowie Zugriff auf alle Videos eines Profils, nicht nur auf die erste Seite.
So findest du den internen API-Endpunkt
Öffne in Chrome DevTools eine TikTok-Profilseite, gehe zum Network-Tab, filtere nach XHR und scrolle nach unten. Du siehst Requests an URLs wie:
1https://www.tiktok.com/api/post/item_list/?WebIdLastTime=...&aid=1988&count=35&cursor=0&secUid=...
Die wichtigsten Parameter sind:
secUid— die eindeutige ID des Profils (du kannst sie aus dem JSON von Methode 1 unteruserInfo.user.secUidauslesen)cursor— der Pagination-Offset (beginnt bei0, jede Antwort liefert den nächsten Cursor-Wert)count— Anzahl der Elemente pro Seite (typischerweise 30–35)
Schritt für Schritt: TikToks interne API mit Python abfragen
Schritt 1: Die secUid des Zielprofils ermitteln.
Du kannst sie aus dem versteckten JSON (Methode 1) oder aus dem HTML der Profilseite ziehen.
Schritt 2: API-Request aufbauen und senden.
1import requests
2import json
3sec_uid = "MS4wLjABAAAA..." # Aus Methode 1
4api_url = "https://www.tiktok.com/api/post/item_list/"
5params = {
6 "aid": "1988",
7 "secUid": sec_uid,
8 "count": 35,
9 "cursor": 0,
10}
11headers = {
12 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
13 "Referer": "https://www.tiktok.com/",
14}
15resp = requests.get(api_url, params=params, headers=headers)
16data = resp.json()
Schritt 3: Antwort parsen.
Jedes Element in data["itemList"] enthält dieselbe Videostruktur wie in Methode 1 — desc, stats, video.playAddr, video.downloadAddr usw.
Schritt 4: Durch alle Videos paginieren.
1all_videos = []
2cursor = 0
3has_more = True
4while has_more:
5 params["cursor"] = cursor
6 resp = requests.get(api_url, params=params, headers=headers)
7 data = resp.json()
8 items = data.get("itemList", [])
9 all_videos.extend(items)
10 has_more = data.get("hasMore", False)
11 cursor = data.get("cursor", 0)
12 print(f"{len(items)} Videos abgerufen, insgesamt: {len(all_videos)}, hasMore: {has_more}")
13print(f"Insgesamt gescrapte Videos: {len(all_videos)}")
Jeder Durchlauf liefert den nächsten Stapel und einen neuen Cursor. Die Schleife läuft, bis hasMore False ist.
Grenzen der internen API-Methode
- TikTok ändert diese Endpunkte und die benötigten Parameter häufig – das ist die wartungsintensivste Methode. In den letzten Monaten erfordern manche Requests bereits
msToken,X-Bogusoder andere Signaturparameter, die von TikToks erzeugt werden (Spoiler: Das in reinem Python nachzubauen ist nicht trivial). - Für bestimmte Datentypen können Session-Cookies oder zusätzliche Tokens nötig sein
- IP-basiertes Rate Limiting gilt weiterhin – Proxy-Rotation ist empfehlenswert
- Wenn du leere
itemList-Arrays bekommst, ist deinmsTokenwahrscheinlich veraltet (er rotiert im Browser etwa alle 10 Sekunden) - Am besten geeignet für große Datenmengen, wenn du alle Videos eines Profils brauchst und die Einschränkung der ersten Seite aus Methode 1 nicht ausreicht
Methode 3: TikTok-Videos mit Playwright scrapen (Browser-Automatisierung)
Wenn die ersten beiden Methoden an Grenzen stoßen – Login-Pflicht, CAPTCHAs oder Signaturparameter, die du nicht nachbilden kannst – ist Playwright die Ausweichlösung. Es startet einen echten (Headless-)Browser, bewegt sich auf TikTok wie ein echter Nutzer und kann JavaScript-Rendering, Infinite Scroll und sogar authentifizierte Sessions verarbeiten.
Playwright für TikTok-Scraping einrichten
Installiere Playwright und die Browser-Binaries:
1pip install playwright
2playwright install firefox
Ich empfehle für TikTok-Scraping Firefox statt Chromium. Community-Tests zeigen durchgängig eine mit Firefox, und TikToks Bot-Erkennung ist besonders aggressiv gegenüber headless Chromium-Browsern.
Für zusätzliche Tarnung kannst du Playwright mit (einem gepatchten Playwright-Fork) oder kombinieren (Firefox, das auf C++-Ebene zur Anti-Erkennung angepasst wurde). In erreicht Camoufox nahezu perfekte Stealth-Werte gegenüber großen Bot-Detection-Diensten.
Schritt für Schritt: TikTok-Profilvideos mit Playwright scrapen
Schritt 1: Einen headless Firefox starten und das Profil aufrufen.
1import asyncio
2from playwright.async_api import async_playwright
3import json
4async def scrape_tiktok_profile(username):
5 async with async_playwright() as p:
6 browser = await p.firefox.launch(headless=True)
7 context = await browser.new_context(
8 user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0",
9 viewport={"width": 1280, "height": 720},
10 )
11 page = await context.new_page()
12 await page.goto(f"https://www.tiktok.com/@{username}", wait_until="networkidle")
Schritt 2: Warten, bis das Video-Raster geladen ist.
1 # Warten, bis Video-Elemente erscheinen
2 await page.wait_for_selector('[data-e2e="user-post-item"]', timeout=15000)
Wenn TikTok ein Overlay mit „Something went wrong“ zeigt, musst du eventuell auf einen Retry-Button klicken:
1 retry_btn = page.locator('button:has-text("Retry")')
2 if await retry_btn.count() > 0:
3 await retry_btn.click()
4 await page.wait_for_selector('[data-e2e="user-post-item"]', timeout=15000)
Schritt 3: Daten aus dem versteckten JSON extrahieren (auch in Playwright).
Am zuverlässigsten ist es, auch im Browser den Hydration-JSON-Block auszulesen:
1 script_el = page.locator("#__UNIVERSAL_DATA_FOR_REHYDRATION__")
2 raw_json = await script_el.inner_text()
3 data = json.loads(raw_json)
4 # Dieselbe JSON-Navigation wie in Methode 1
5 user_detail = data["__DEFAULT_SCOPE__"]["webapp.user-detail"]
6 videos = user_detail.get("itemList", [])
Schritt 4: Infinite Scroll für mehr Videos behandeln.
Wenn du mehr als die ersten ~30 Videos brauchst, scrolle nach unten und fange zusätzliche XHR-Antworten ab:
1 all_videos = list(videos)
2 # API-Antworten beim Scrollen abfangen
3 api_responses = []
4 async def capture_response(response):
5 if "/api/post/item_list" in response.url:
6 try:
7 body = await response.json()
8 api_responses.append(body)
9 except:
10 pass
11 page.on("response", capture_response)
12 # Nach unten scrollen, um weitere Inhalte zu laden
13 for _ in range(5): # Scroll-Anzahl nach Bedarf anpassen
14 await page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
15 await asyncio.sleep(2)
16 # Videos aus den abgefangenen Antworten sammeln
17 for api_resp in api_responses:
18 items = api_resp.get("itemList", [])
19 all_videos.extend(items)
20 print(f"Insgesamt Videos: {len(all_videos)}")
21 await browser.close()
22 return all_videos
23# Ausführen
24videos = asyncio.run(scrape_tiktok_profile("charlidamelio"))
Du solltest jetzt eine Liste von Video-Objekten aus dem ersten Seitenaufruf und aus weiteren per Scrollen geladenen Seiten haben.
Grenzen der Playwright-Methode
- Mit Abstand langsamste Methode (vollständiges Rendern, Netzwerk-Roundtrips, Scroll-Pausen)
- Höherer Ressourcenverbrauch – jede Browserinstanz benötigt spürbar RAM und CPU
- Trotz allem bei großem Umfang weiterhin anfällig für IP-Blocking – Proxy-Rotation bleibt sinnvoll
- Am besten geeignet für komplexe Interaktionen, Inhalte hinter einer Login-Sperre, CAPTCHAs oder wenn Methode 1 und 2 blockiert werden
Wie du TikTok-Videos (.mp4) mit Python herunterlädst
Das ist der Abschnitt, der die größte Lücke in fast jedem anderen TikTok-Scraping-Tutorial schließt. Metadaten zu extrahieren ist nützlich, aber die meisten, die nach „TikTok-Videos scrapen“ suchen, wollen die eigentlichen Videodateien.
TikTok bettet Download-URLs direkt in das Videoobjekt ein:
playAddr— meist die Version ohne Wasserzeichen oder mit weniger WasserzeichendownloadAddr— die Version, die TikTok für den In-App-Download vorsieht (mit TikTok-Wasserzeichen)
Beide URLs sind zeitkritisch und laufen nach kurzer Zeit ab (meist nach ein paar Stunden). Du solltest sie also direkt nach dem Extrahieren herunterladen.
Schritt für Schritt: Eine TikTok-Videodatei herunterladen
Schritt 1: Die Video-URL aus einer der drei Methoden oben extrahieren.
1video_url = video["video"]["playAddr"] # Version ohne Wasserzeichen
2# oder
3video_url = video["video"]["downloadAddr"] # Mit Wasserzeichen
Schritt 2: Eine GET-Anfrage mit den richtigen Headern senden.
Das ist der Schritt, an dem viele scheitern. Wenn du einfach requests.get(video_url) aufrufst, bekommst du einen 403. TikTok prüft den Referer-Header und erwartet einen browserähnlichen User-Agent.
1import requests
2headers = {
3 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
4 "Referer": "https://www.tiktok.com/",
5}
6resp = requests.get(video_url, headers=headers, stream=True)
Schritt 3: Den Antwortinhalt in eine .mp4-Datei schreiben.
Nutze stream=True und schreibe in Chunks – TikTok-Videos können groß sein, und du willst die Datei nicht komplett in den Speicher laden:
1video_id = video["id"]
2filename = f"tiktok_{video_id}.mp4"
3with open(filename, "wb") as f:
4 for chunk in resp.iter_content(chunk_size=1024 * 1024): # 1-MB-Chunks
5 if chunk:
6 f.write(chunk)
7print(f"Heruntergeladen: {filename}")
Jetzt solltest du eine abspielbare .mp4-Datei auf deinem lokalen Rechner haben.
Wasserzeichen vs. Download ohne Wasserzeichen
TikTok speichert für jedes Video sowohl eine Version mit als auch ohne Wasserzeichen. Die playAddr-URL liefert oft die sauberere Version (die auch der Player verwendet), während downloadAddr das TikTok-Wasserzeichen mit dem Creator-Namen enthält.
Ein kurzer ethischer Hinweis: Das Wasserzeichen dient der Zuordnung des Creators. Wenn du Videos für Recherche, Analyse oder interne Prüfungen herunterlädst, ist die Nutzung von playAddr in der Regel unproblematisch. Wenn du Inhalte weiterverbreitest oder erneut veröffentlichst, wirft das Entfernen der Urheberkennzeichnung sowohl ethische als auch urheberrechtliche Fragen auf. Mehr dazu im rechtlichen Abschnitt weiter unten.
Für eine robustere Download-Pipeline kannst du verwenden – der TikTok-Extractor erledigt Signaturberechnung und URL-Auflösung automatisch, sodass du dich nicht selbst um Header und Token-Ablauf kümmern musst.
Direktvergleich: Welche Python-Methode solltest du verwenden?
Hier ist die Vergleichstabelle, die ich mir gewünscht hätte, als ich mit TikTok-Scraping-Projekten angefangen habe:
| Kriterium | Methode 1: Verstecktes JSON | Methode 2: Interne API | Methode 3: Playwright |
|---|---|---|---|
| Schwierigkeitsgrad | Anfänger | Mittelstufe | Mittelstufe |
| Geschwindigkeit | Schnell (1 Request pro Seite) | Schnell (JSON-API) | Langsam (vollständiges Rendern) |
| Robustheit gegen Anti-Bot | Mittel | Niedrig (Endpunkte ändern sich) | Hoch (imitiert echten Browser) |
| .mp4-Videos herunterladen? | Ja (über playAddr) | Ja (URL in der Antwort) | Ja (Netzwerk abfangen) |
| Infinite Scroll unterstützt | Nein (nur erste Seite) | Ja (Cursor-Pagination) | Ja (Scroll-Simulation) |
| Proxy bei größerem Umfang nötig | Ja | Ja | Ja |
| Wartungsaufwand | Mittel (JSON-Struktur ändert sich) | Hoch (Endpunkte/Signaturen ändern sich häufig) | Niedrig bis mittel (Browser passt sich an) |
| Am besten für | Schnelle Einmal-Scrapes von Profilen | Große Datenmengen, alle Videos | Inhalte mit Login-Sperre oder komplexe Seiten |
Meine Empfehlung:
- Du brauchst nur einen schnellen Schnappschuss eines Profils? Starte mit Methode 1. Die Einrichtung dauert etwa 30 Sekunden, und du bekommst Daten in unter einer Sekunde pro Seite.
- Du brauchst alle Videos eines Profils mit Pagination? Dann ist Methode 2 die richtige Wahl – sei aber darauf vorbereitet, den Code anzupassen, wenn TikTok seine API-Parameter ändert.
- Du hast Login-Sperren, CAPTCHAs oder brauchst maximale Robustheit? Dann nimm Methode 3 mit Playwright. Sie ist langsamer und schwerer, dafür aber am schwierigsten für TikTok zu blockieren.
In der Praxis beginne ich oft mit Methode 1 und wechsle nur dann zu Methode 2 oder 3, wenn ich an Grenzen stoße. So bleiben Infrastruktur und Kosten niedrig.
Kein Python nötig? TikTok-Videos mit No-Code-Tools scrapen
Viele, die nach „TikTok-Videos mit Python scrapen“ suchen, brauchen in Wirklichkeit gar kein Python. Sie brauchen nur die Daten. Wenn du ein Marketing-Analyst bist, der Videometadaten von ein paar Konkurrenzprofilen braucht, oder ein Brand Manager, der Erwähnungen beobachtet, ist ein Python-Setup mit Proxy-Rotation und Signatur-Handling oft einfach zu groß aufgezogen.

Hier ist ein ehrlicher Vergleich der Ansätze:
| Ansatz | Kenntnisstand | Kosten | Wartung | Am besten für | |---|---|---|---|---| | Python (DIY) | Mittelstufe+ | Kostenlos (+ Proxy-Kosten) | Hoch (Skripte brechen) | Volle Kontrolle, eigene Pipelines | | (Chrome-Erweiterung) | Anfänger | Kostenloser Tarif verfügbar | Keine (KI liest die Seite jedes Mal neu) | Schnelle Video-Datenextraktion, Export nach Sheets/Excel | | Apify TikTok Scraper | Anfänger | Kostenpflichtig (pro Lauf) | Niedrig (von Apify gepflegt) | Große automatisierte Läufe nach Zeitplan | | TikAPI | Entwickler | Kostenpflichtiges Abo | Mittel | Apps auf Basis von TikTok-Daten |
Wie Thunderbit TikTok-Scraping löst
ist der KI-Web-Scraper, den wir bei Thunderbit entwickelt haben, und er funktioniert anders als klassische Scraper. Statt auf vorgefertigte CSS-Selektoren oder XPath-Regeln zu setzen, die bei jeder Layoutänderung von TikTok brechen, liest Thunderbits KI die Seite jedes Mal neu und schlägt passende Spalten vor — Caption, Likes, Hashtags, Video-URL, Autor usw.
Der Ablauf ist tatsächlich nur zwei Klicks:
- Öffne ein TikTok-Profil in Chrome, klicke auf die Thunderbit-Erweiterung und wähle „AI Suggest Fields“. Thunderbit scannt die Seite und schlägt eine Tabellenstruktur vor.
- Prüfe die vorgeschlagenen Spalten, passe sie bei Bedarf an und klicke auf „Scrape“.
Die Daten lassen sich direkt nach Google Sheets, Excel, Airtable oder Notion exportieren. Keine zu pflegenden CSS-Selektoren, kein Code zum Debuggen, keine Proxy-Konfiguration. Für Marketing-Analysten, die Videometadaten von ein paar Profilen brauchen, ist das messbar schneller als ein Python-Setup – und es bricht nicht, wenn TikTok sein Frontend ändert (was laut Community-Berichten alle paar Wochen passiert).
Thunderbit unterstützt außerdem – es kann jede einzelne Videoseite besuchen und deine Datentabelle mit zusätzlichen Details wie vollständigen Kommentarzahlen, Musikinfos oder Videodauer anreichern.
Du kannst es kostenlos über die testen. Mehr zur Funktionsweise findest du auf unserem .
Rechtliche und ethische Leitplanken fürs TikTok-Scraping
Keines der meistplatzierten Tutorials zu diesem Thema spricht über die Rechtslage – und das ist angesichts der aktiven rechtlichen Schritte von TikTok gegen Scraping-Dienste eine ziemlich auffällige Lücke. Das solltest du wissen.
Die TikTok-Nutzungsbedingungen (§ 4.1) verbieten automatisierten Zugriff ausdrücklich. Ein Verstoß gegen die AGB ist zwar kein Straftatbestand, kann aber zu Kontosperren, IP-Blocks oder zivilrechtlichen Schritten führen.
Die Rechtslage ist bei öffentlich zugänglichen Daten oft weniger streng, als viele denken. Das wichtigste Präzedenzurteil ist Meta Platforms v. Bright Data (N.D. Cal., Jan. 2024): Das Gericht entschied, dass das Scrapen öffentlich zugänglicher Daten im ausgeloggten Zustand nicht gegen Metas Nutzungsbedingungen verstößt. Meta zog die Klage zurück und verzichtete auf Berufung. Das frühere Urteil hiQ v. LinkedIn des Ninth Circuit (nach Van Buren erneut bestätigt) stellte fest, dass das Scrapen öffentlich zugänglicher Daten kein CFAA-Verstoß ist – auch wenn hiQ am Ende einen Vergleich schloss, 500.000 US-Dollar zahlte und einer dauerhaften Unterlassungsverfügung zustimmte. Das zeigt, dass die Durchsetzung von AGB trotzdem richtig weh tun kann.
GDPR und CCPA gelten, wenn du personenbezogene Daten von Nutzern aus der EU oder Kalifornien sammelst. Öffentliche Posts zu scrapen ist das eine; Datenbanken mit persönlichen Informationen einzelner Personen aufzubauen, ist etwas anderes.
Praktische Leitlinien:
- Requests drosseln, damit du TikToks Server nicht bombardierst
- Keine privaten Accounts oder Inhalte von Minderjährigen scrapen
- Keine urheberrechtlich geschützten Videos kommerziell weiterverbreiten
robots.txtrespektieren (TikTok verbietet die meisten automatisierten Crawls)- Videos für eigene Recherche oder Analyse herunterzuladen ist etwas anderes als sie erneut zu veröffentlichen – den Unterschied solltest du kennen
Hinweis: Das ist Bildungsinhalt, keine Rechtsberatung. Wenn du ein kommerzielles Produkt auf Basis gescrapter TikTok-Daten aufbauen willst, sprich mit einer Rechtsberatung.
Fazit: Die wichtigsten Erkenntnisse
TikTok-Scraping im Jahr 2025 ist ein bewegliches Ziel. Der Anti-Bot-Stack der Plattform gehört zu den ausgereiftesten im Web, und naive Ansätze (einfaches requests, von ChatGPT generierte Snippets, veraltete Tutorials) scheitern. Mit der richtigen Methode ist es aber absolut machbar.
Das solltest du mitnehmen:
- Methode 1 (verstecktes JSON) ist die schnellste und einfachste – starte hier für schnelle Profil-Scrapes.
- Methode 2 (interne API) liefert Pagination und Zugriff auf große Datenmengen, braucht aber am meisten Pflege, weil sich Endpunkte und Signaturanforderungen häufig ändern.
- Methode 3 (Playwright) ist am widerstandsfähigsten gegen Anti-Bot-Maßnahmen, kostet dafür aber Geschwindigkeit und Ressourcen.
- Alle drei Methoden können Video-Download-URLs extrahieren – und dieser Leitfaden ist der einzige, der dir auch wirklich zeigt, wie du die .mp4-Dateien mit den richtigen Headern herunterlädst.
- Für nicht-technische Nutzer bietet einen deutlich schnelleren Weg zu denselben Daten, ohne Code schreiben oder pflegen zu müssen. Der KI-basierte Ansatz bricht nicht, wenn TikTok sein Layout ändert – und das passiert laut Community-Berichten häufiger, als einem lieb ist.
Wenn du ohne Python-Setup starten möchtest, – der kostenlose Tarif reicht aus, um sie an ein paar Profilen zu testen und zu sehen, ob sie zu deinem Workflow passt. Wer den Python-Weg geht, sollte mit Methode 1 beginnen, die Daten validieren und dann bei Bedarf skalieren.
Du möchtest tiefer in Web-Scraping-Techniken einsteigen? Dann schau dir unsere Guides an: , und .
FAQs
Ist es legal, TikTok-Videos mit Python zu scrapen?
Das Scrapen öffentlich zugänglicher Daten bewegt sich in einer rechtlichen Grauzone und ist kein eindeutiger Verstoß. Das Urteil Meta v. Bright Data (2024) stützt die Position, dass das ausgeloggte Scrapen öffentlicher Daten nicht gegen die Plattform-Nutzungsbedingungen verstößt. TikTok verbietet automatisierten Zugriff jedoch ausdrücklich, und bei personenbezogenen Daten gelten GDPR-/CCPA-Pflichten. Es ist nicht so klar illegal, wie viele befürchten, aber auch nicht risikofrei. Für deinen konkreten Anwendungsfall solltest du juristischen Rat einholen.
Welche Python-Bibliothek ist am besten für TikTok-Scraping?
Das hängt von deinem Ansatz ab. Für die Extraktion aus verstecktem JSON (Methode 1) reichen requests plus beautifulsoup4 völlig aus. Für interne API-Aufrufe (Methode 2) funktionieren requests oder httpx. Für Browser-Automatisierung (Methode 3) ist playwright derzeit der Standard – es hat Selenium bei neuen Scraping-Projekten in der Nutzung überholt, mit gegenüber etwa 53 Millionen bei Selenium. Der TikTok-Api-Wrapper (rund 6,3K GitHub-Stars) ist ebenfalls eine Option, wenn du eine höhere Abstraktion willst, kann aber instabil sein.
Kann ich TikTok-Videos ohne Wasserzeichen mit Python herunterladen?
Ja. TikToks eigene Daten enthalten eine playAddr-URL, die meist eine Version des Videos ohne das Standard-Wasserzeichen liefert. Dieser Leitfaden zeigt, wie du diese URL aus jeder der drei Methoden extrahierst und die .mp4-Datei mit den passenden Headern herunterlädst. Das Feld downloadAddr enthält dagegen das Wasserzeichen.
Warum liefert mein TikTok-Scraper leere Daten?
Die häufigste Ursache ist, dass TikTok JavaScript zum Rendern der Inhalte benötigt. Ein einfaches requests.get() holt nur die HTML-Hülle – die eigentlichen Daten stecken entweder in einem versteckten JSON-Script-Tag (Methode 1) oder werden dynamisch per JavaScript geladen (Methode 3). Wenn du leeres HTML bekommst, probiere zuerst Methode 1. Falls das nicht funktioniert, prüfe deine Header (ein fehlender Referer ist der häufigste Grund für 403-Fehler) oder wechsle zu Methode 3 mit Playwright.
Wie verhindere ich, beim TikTok-Scraping blockiert zu werden?
Nutze realistische Browser-Header (inklusive User-Agent, Referer und Accept-Language), rotiere Residential- oder Mobile-Proxies (Rechenzentrums-IPs werden oft innerhalb von Minuten auffällig), baue zufällige Pausen zwischen Requests ein (mindestens 1–3 Sekunden) und vermeide extrem hohe Abrufraten. Methode 3 (Playwright) bietet die höchste Resistenz gegen Blocking, weil sie eine echte Browser-Session imitiert. Bei ernsthaftem Umfang solltest du Proxy-Kosten einplanen – einfache Residential-Proxies kosten bei großen Anbietern etwa .