Leer hoe je TikTok-video's scrapt met Python

Laatst bijgewerkt op April 15, 2026

TikTok heeft inmiddels zo’n en makers uploaden naar schatting 23 miljoen video’s per dag. Als je ooit geprobeerd hebt om data uit zelfs maar een klein deel van die stroom te halen, weet je al hoe frustrerend dat kan zijn.

Dit gaat meestal zo: je zoekt op “scrape TikTok videos with Python”, kopieert een fragment uit een tutorial (of laat ChatGPT er één schrijven), voert het uit en krijgt… niets. Lege HTML. Een 403-fout. Of die gevreesde melding “Process finished with exit code 0” zonder enige output. Ik heb precies deze cyclus tientallen keren voorbij zien komen in GitHub-issues en Reddit-threads, en daarom heb ik deze handleiding samengesteld. We behandelen drie Python-methodes die in 2025 echt werken, nemen stap voor stap door hoe je de daadwerkelijke .mp4-videobestanden downloadt (niet alleen metadata — daar blijven vrijwel alle andere tutorials bij steken), en sluiten af met een vergelijkingstabel zodat je de juiste aanpak voor jouw situatie kunt kiezen. Als je helemaal geen Python nodig hebt, laat ik ook no-code alternatieven zien zoals waarmee je dezelfde data in ongeveer twee klikken kunt ophalen.

Wat betekent “TikTok-video’s scrapen” eigenlijk?

Voordat we de code induiken, is het handig om eerst scherp te krijgen wat mensen bedoelen met “TikTok-video’s scrapen” — want die term kan twee totaal verschillende dingen betekenen:

  1. Video-metadata extraheren: Beschrijvingen, hashtags, likes, reacties, shares, weergaven, publicatiedatum en informatie over de maker. Hier richten de meeste tutorials zich op.
  2. De daadwerkelijke videobestanden (.mp4) downloaden: De video zelf opslaan op je computer. Dat is wat de meeste mensen eigenlijk willen als ze “scrape TikTok videos” intypen — en precies het onderdeel dat bijna niemand uitlegt.

Deze gids behandelt beide. Elke methode hieronder kan metadata ophalen en de download-URL’s leveren die je nodig hebt om de .mp4-bestanden op te slaan.

Waarom TikTok-video’s scrapen met Python?

Met en TikTok Shop dat wereldwijd genereert, zijn de zakelijke redenen om TikTok-data te gebruiken behoorlijk groot. Dit zijn de use-cases die ik het vaakst tegenkom:

Use caseWat je scraptVoor wie
Influencer- en marketingonderzoekEngagementratio’s, volgersaantallen, contentformaten, hashtagprestatiesMarketingteams, bureaus
ContentstrategieTrendende hashtags, virale videofomaten, postfrequentieContentmakers, social media managers
MerkmonitoringVermeldingen, campagnebereik, sentiment van het publiekMerkmanagers, PR-teams
ConcurrentieanalyseVideoprestaties van concurrenten, advertentiecreatives, TikTok Shop-aanbiedingenE-commerce, productteams
MarktonderzoekOpkomende trends, gedrag van doelgroepen, productontdekkingAnalisten, hedgefondsen, onderzoeksbureaus
Archivering & complianceVideobestanden voor interne review of dossiervormingJuridische teams, compliance, bureaus

De commerciële impact is reëel: de Amerikaanse TikTok-advertentie-inkomsten worden in 2026 geraamd op $23,4 miljard, en affiliate creators genereren in de topcategorieën van TikTok Shop. Werk je in e-commerce of influencer marketing, dan heeft deze data directe financiële waarde.

Waarom je basis Python-code op TikTok faalt

Als je al iets als dit hebt geprobeerd en nergens uitkwam, ben je zeker niet de enige:

1import requests
2from bs4 import BeautifulSoup
3resp = requests.get("https://www.tiktok.com/@someuser")
4soup = BeautifulSoup(resp.text, "html.parser")
5# ...en dan staat er in de HTML niets bruikbaars

De reden is simpel: TikTok is een van de lastigste platforms om te scrapen. Een simpele requests.get() geeft vooral een lege HTML-schaal terug, omdat de daadwerkelijke content in de browser met JavaScript wordt gerenderd. Daarnaast zet TikTok een agressieve anti-botlaag in, met gedragsdetectie, TLS-fingerprinting, een die request-handtekeningen genereert, en dynamische CSS-selectors die zonder waarschuwing wijzigen.

tiktok-anti-bot-wall.webp

Volgens het Imperva 2025 Bad Bot Report was geautomatiseerd verkeer in 2024 voor het eerst groter dan menselijk verkeer — bots zijn inmiddels goed voor . TikTok weet dat en heeft zijn verdediging daarop ingericht.

Hier is een korte diagnose-tabel zodat je kunt inschatten wat er misgaat en direct naar de juiste methode kunt springen:

SymptoomWaarschijnlijke oorzaakMethode die dit oplost
Lege HTML / geen dataContent wordt via JS geladen; requests kan geen JavaScript uitvoerenMethode 1 (verborgen JSON) of Methode 3 (Playwright)
403 / toegang geweigerdOntbrekende of verkeerde headers; anti-botdetectieMethode 1 met correcte headers
Het werkt één keer en stopt daarnaRate limiting / IP-blokkadeProxy-rotatie (alle methodes)
Login-wall verschijntSessie-/cookievereisteMethode 3 (browser met opgeslagen sessie)
Code die door ChatGPT is gegenereerd levert niets opTikTok-structuur is gewijzigd sinds de trainingsdata van het modelAlle 3 methodes (actuele aanpak)

De limiet ligt ruwweg rond 30–60 requests per minuut per IP voordat je soft blocks of CAPTCHA’s gaat zien. Datacenter-IP’s worden binnen minuten gemarkeerd — residentiële of mobiele proxies zijn voor volume eigenlijk onmisbaar.

Overzicht: 3 manieren om TikTok-video’s met Python te scrapen

Hier is de routekaart. Elke methode heeft andere voor- en nadelen, en ik behandel ze alle drie met werkende code:

  1. Verborgen JSON extraheren — Parse de __UNIVERSAL_DATA_FOR_REHYDRATION__-script tag die in TikTok-pagina’s is ingebed. Het snelst, simpelst, geen browser nodig.
  2. TikTok’s interne API — Roep direct het ongedocumenteerde /api/post/item_list/-endpoint aan voor bulkdata met cursor-gebaseerde paginering.
  3. Browserautomatisering met Playwright — Render pagina’s in een headless browser om infinite scroll, dynamische content en login-walls aan te kunnen.

Alle drie de methodes kun je ook gebruiken om de daadwerkelijke .mp4-videobestanden te downloaden — dat bespreek ik in een apart gedeelte na de methodes. Helemaal achteraan staat een volledige vergelijkingstabel zodat je een weloverwogen keuze kunt maken.

Methode 1: TikTok-video’s scrapen met verborgen JSON (geschikt voor beginners)

Dit is de aanpak waarmee ik zou beginnen. TikTok verwerkt op vrijwel elke pagina een enorme JSON-blok in een <script>-tag met de id __UNIVERSAL_DATA_FOR_REHYDRATION__. Dat blok bevat alle profiel- en videodata die de frontend normaal zou renderen — waardoor je het met één HTTP-request kunt ophalen, zonder browser.

Wat je nodig hebt

  • Python 3.8+
  • requests (of httpx)
  • beautifulsoup4 (of parsel)
  • Correcte headers: User-Agent, Referer, Accept-Language

Installeer de dependencies:

1pip install requests beautifulsoup4

Stap voor stap: TikTok-videodata uit de script-tag halen

Stap 1: Stuur een GET-request met realistische browserheaders.

Hier gaat het bij beginners meestal mis. Als je een kale requests.get() zonder headers stuurt, geeft TikTok een 403 of een CAPTCHA-pagina terug. Je hebt minimaal een actuele browser-User-Agent en een Referer-header nodig.

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)

Stap 2: Parse de HTML en zoek de hydration script-tag.

1soup = BeautifulSoup(resp.text, "html.parser")
2script_tag = soup.find("script", id="__UNIVERSAL_DATA_FOR_REHYDRATION__")

Als script_tag None is, heeft TikTok je waarschijnlijk geblokkeerd (controleer de statuscode) of is de tag-id gewijzigd (zeldzaam, maar mogelijk).

Stap 3: Lees de inhoud van de script-tag in als JSON.

1data = json.loads(script_tag.string)

Stap 4: Navigeer door de JSON-structuur om videometadata te extraheren.

De structuur zit genest onder __DEFAULT_SCOPE__. Voor een profielpagina van een gebruiker:

1user_detail = data["__DEFAULT_SCOPE__"]["webapp.user-detail"]
2user_info = user_detail["userInfo"]
3# Profielstatistieken
4stats = user_info["stats"]
5print(f"Volgers: {stats['followerCount']}, Likes: {stats['heartCount']}")
6# Videolijst (eerste pagina met video’s)
7item_list = user_detail.get("itemList", [])
8for video in item_list:
9    print(video["desc"])  # Beschrijving
10    print(video["stats"]["playCount"])  # Weergaven
11    print(video["video"]["playAddr"])  # Download-URL van de video (zonder watermark)
12    print(video["video"]["downloadAddr"])  # Download-URL van de video (met watermark)

Stap 5: Extraheer de download-URL’s van de video.

Het veld playAddr levert doorgaans een schonere versie van de video op (vaak zonder TikTok-watermark), terwijl downloadAddr de standaard watermark bevat. Beide zijn directe URL’s naar het .mp4-bestand — maar om ze te downloaden heb je specifieke headers nodig (zie het downloadgedeelte hieronder).

Je hebt nu een lijst met video-objecten, elk met de beschrijving, statistieken, aanmaaktijd, hashtags (in challenges[] en textExtra) en directe video-URL’s.

Beperkingen van de verborgen JSON-methode

  • Haalt alleen data op van de eerste paginalading — meestal de eerste ~30 video’s op een profiel
  • Kan geen infinite scroll of paginering aan (er is geen “volgende pagina” om op te vragen)
  • Als TikTok de script-tag-id of JSON-structuur wijzigt, breekt de parser (dit gebeurt regelmatig — helpt dit vroeg te detecteren)
  • Het meest geschikt voor: snelle profielscrapes, losse datapunten of situaties waarin je alleen de recentste video’s nodig hebt

Methode 2: TikTok-video’s scrapen via de interne API

De frontend van TikTok laadt niet alle video’s in één keer — tijdens het scrollen doet de site XHR-calls naar interne API-endpoints. De belangrijkste voor gebruikersvideo’s is /api/post/item_list/. Je kunt dit endpoint rechtstreeks vanuit Python aanroepen, waardoor je cursor-gebaseerde paginering krijgt en toegang tot alle video’s op een profiel (niet alleen de eerste pagina).

Hoe je het interne API-endpoint vindt

Open Chrome DevTools op een TikTok-profielpagina, ga naar het Network-tabblad, filter op XHR en scroll omlaag. Je ziet requests naar URL’s zoals:

1https://www.tiktok.com/api/post/item_list/?WebIdLastTime=...&aid=1988&count=35&cursor=0&secUid=...

De belangrijkste parameters zijn:

  • secUid — de unieke ID van het profiel (je kunt die uit de JSON van Methode 1 halen, onder userInfo.user.secUid)
  • cursor — de pagineringsoffset (begint bij 0, elke response geeft de volgende cursorwaarde terug)
  • count — aantal items per pagina (meestal 30–35)

Stap voor stap: TikTok’s interne API opvragen met Python

Stap 1: Haal de secUid op van het doelprofiel.

Je kunt die uit de verborgen JSON halen (Methode 1) of uit de HTML van de profielpagina.

Stap 2: Bouw en verstuur de API-request.

1import requests
2import json
3sec_uid = "MS4wLjABAAAA..."  # Uit 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) Gecko/20100101 Firefox/124.0",
13    "Referer": "https://www.tiktok.com/",
14}
15resp = requests.get(api_url, params=params, headers=headers)
16data = resp.json()

Stap 3: Parse de response.

Elk item in data["itemList"] bevat dezelfde videostructuur als Methode 1 — desc, stats, video.playAddr, video.downloadAddr, enzovoort.

Stap 4: Loop door alle video’s met paginering.

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"Opgehaald: {len(items)} video's, totaal: {len(all_videos)}, hasMore: {has_more}")
13print(f"Totaal aantal gescrapete video's: {len(all_videos)}")

Elke iteratie levert de volgende batch op plus een nieuwe cursor. De loop gaat door totdat hasMore False is.

Beperkingen van de interne API-methode

  • TikTok wijzigt deze endpoints en vereiste parameters regelmatig — dit is de onderhoudsintensiefste methode. De laatste maanden zijn sommige requests msToken, X-Bogus of andere signature-parameters gaan vereisen die door TikTok’s worden gegenereerd (spoiler: dat exact reproduceren in pure Python is niet triviaal).
  • Voor bepaalde datatypes kunnen sessiecookies of extra tokens nodig zijn
  • IP-gebaseerde rate limiting blijft gelden — proxy-rotatie is aan te raden
  • Als je lege itemList-arrays krijgt, is je msToken waarschijnlijk verlopen (deze roteert in de browser ongeveer elke 10 seconden)
  • Het meest geschikt voor: bulk-extractie wanneer je alle video’s van een profiel nodig hebt en de eerste-pagina-beperking van Methode 1 niet volstaat

Methode 3: TikTok-video’s scrapen met Playwright (browserautomatisering)

Wanneer de eerste twee methodes vastlopen — loginvereisten, CAPTCHA’s of signature-parameters die je niet kunt nabootsen — is Playwright de uitwijkoptie. Het start een echte (headless) browser, navigeert door TikTok alsof het een menselijke gebruiker is, en kan JavaScript-rendering, infinite scroll en zelfs geauthenticeerde sessies aan.

Playwright instellen voor TikTok-scraping

Installeer Playwright en de browserbinaries:

1pip install playwright
2playwright install firefox

Ik raad Firefox aan boven Chromium voor TikTok-scraping. Uit tests in de community blijkt consistent met Firefox, en TikTok’s botdetectie is bijzonder streng voor headless browsers op Chromium-basis.

Voor extra stealth kun je Playwright combineren met (een aangepaste Playwright-fork) of (Firefox op C++-niveau aangepast voor anti-detectie). In behaalt Camoufox bijna perfecte stealth-scores tegen grote botdetectieservices.

Stap voor stap: TikTok-profielvideo’s scrapen met Playwright

Stap 1: Start een headless Firefox-browser en open het profiel.

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")

Stap 2: Wacht tot het videorooster geladen is.

1        # Wacht tot de video-items zichtbaar zijn
2        await page.wait_for_selector('[data-e2e="user-post-item"]', timeout=15000)

Als TikTok een overlay “Something went wrong” toont, moet je mogelijk op een retry-knop klikken:

1        retry_btn = page.locator('button:has-text("Retry")')
2        if await retry_btn.count() &gt; 0:
3            await retry_btn.click()
4            await page.wait_for_selector('[data-e2e="user-post-item"]', timeout=15000)

Stap 3: Haal data uit de verborgen JSON op (ook in Playwright).

De meest betrouwbare aanpak blijft om de hydration-JSON op te halen, ook als je een browser gebruikt:

1        script_el = page.locator("#__UNIVERSAL_DATA_FOR_REHYDRATION__")
2        raw_json = await script_el.inner_text()
3        data = json.loads(raw_json)
4        # Zelfde JSON-navigatie als in Methode 1
5        user_detail = data["__DEFAULT_SCOPE__"]["webapp.user-detail"]
6        videos = user_detail.get("itemList", [])

Stap 4: Verwerk infinite scroll voor meer video’s.

Als je meer dan de eerste ~30 video’s nodig hebt, scroll dan omlaag en vang extra XHR-responses op:

1        all_videos = list(videos)
2        # Intercepteer API-responses terwijl we scrollen
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        # Scroll omlaag om meer te laden
13        for _ in range(5):  # Pas het aantal scrolls aan indien nodig
14            await page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
15            await asyncio.sleep(2)
16        # Verzamel video’s uit de onderschepte responses
17        for api_resp in api_responses:
18            items = api_resp.get("itemList", [])
19            all_videos.extend(items)
20        print(f"Totaal aantal video's: {len(all_videos)}")
21        await browser.close()
22        return all_videos
23# Uitvoeren
24videos = asyncio.run(scrape_tiktok_profile("charlidamelio"))

Je hebt nu een lijst met video-objecten uit zowel de eerste paginalading als eventuele extra pagina’s die via scrollen zijn geladen.

Beperkingen van de Playwright-methode

  • Verreweg de langzaamste methode (volledige pagerendering, netwerk-rondes, scrollvertraging)
  • Zwaarder voor je systeem — elke browserinstantie gebruikt flink wat geheugen en CPU
  • Nog steeds gevoelig voor IP-blokkering op schaal — combineer met proxy-rotatie
  • Het meest geschikt voor: complexe interacties, content achter een login-wall, omgaan met CAPTCHA’s of situaties waarin Methode 1 en 2 worden geblokkeerd

TikTok-video’s (.mp4) downloaden met Python

Dit is het gedeelte dat in vrijwel elke andere TikTok-scrapingtutorial ontbreekt. Metadata extraheren is nuttig, maar de meeste mensen die zoeken op “scrape TikTok videos” willen de daadwerkelijke videobestanden.

TikTok neemt download-URL’s op in het video-object:

  • playAddr — doorgaans de versie zonder watermark of met een kleinere watermark
  • downloadAddr — de versie die TikTok bedoeld heeft voor downloaden in de app (inclusief TikTok-watermark)

Beide URL’s zijn tijdgevoelig en verlopen na korte tijd (meestal een paar uur), dus je moet snel downloaden nadat je ze hebt opgehaald.

Stap voor stap: een TikTok-videobestand downloaden

Stap 1: Extraheer de video-URL met een van de drie methodes hierboven.

1video_url = video["video"]["playAddr"]  # Versie zonder watermark
2# of
3video_url = video["video"]["downloadAddr"]  # Met watermark

Stap 2: Stuur een GET-request met de juiste headers.

Dit is de stap waar veel mensen vastlopen. Als je gewoon requests.get(video_url) doet, krijg je een 403. TikTok controleert de Referer-header en verwacht een browserachtige 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)

Stap 3: Schrijf de response weg naar een .mp4-bestand.

Gebruik stream=True en schrijf in blokken — TikTok-video’s kunnen groot zijn, en je wilt niet het hele bestand in het geheugen 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):  # Blokken van 1 MB
5        if chunk:
6            f.write(chunk)
7print(f"Gedownload: {filename}")

Je hebt nu een afspeelbaar .mp4-bestand op je lokale machine.

Watermark versus download zonder watermark

TikTok bewaart zowel een versie mét als zonder watermark van elke video. De playAddr-URL geeft vaak een schonere versie terug (de versie die de speler gebruikt), terwijl downloadAddr de TikTok-watermark met de gebruikersnaam van de maker bevat.

Een korte opmerking over de ethiek hier: de watermark is bedoeld om de maker te erkennen. Als je video’s downloadt voor onderzoek, analyse of interne review, is het gebruiken van playAddr doorgaans prima. Als je content opnieuw verspreidt of opnieuw plaatst, levert het verwijderen van naamsvermelding zowel ethische als auteursrechtelijke vragen op. Meer daarover in het juridische gedeelte hieronder.

Voor een robuustere download-pijplijn kun je overwegen — de TikTok-extractor daarvan handelt signatuurberekeningen en URL-resolutie automatisch af, zodat je headers en tokenverloop niet zelf hoeft te beheren.

Welke Python-methode moet je kiezen? Een vergelijking

Hier is de vergelijkingstabel die ik zelf had willen hebben toen ik begon met TikTok-scrapingprojecten:

CriteriaMethode 1: Verborgen JSONMethode 2: Interne APIMethode 3: Playwright
MoeilijkheidsgraadBeginnerGemiddeldGemiddeld
SnelheidSnel (1 request per pagina)Snel (JSON API)Traag (volledige pagerendering)
Anti-botbestendigheidMiddelLaag (endpoints wijzigen)Hoog (lijkt op een echte browser)
Downloadt video .mp4?Ja (via playAddr)Ja (URL in response)Ja (netwerkverkeer onderscheppen)
Ondersteunt infinite scrollNee (alleen eerste pagina)Ja (cursor-paginering)Ja (scroll simulatie)
Proxy nodig op schaalJaJaJa
Onderhoud nodigMiddel (JSON-structuur wijzigt)Hoog (endpoints/signatures veranderen vaak)Laag-middel (browser past zich aan)
Beste voorSnelle, eenmalige profielscrapesBulk-extractie, alle video’sContent achter login of complexe content

Mijn advies:

  • Heb je alleen een snelle momentopname van één profiel nodig? Begin met Methode 1. Het kost ongeveer 30 seconden om op te zetten en levert data op in minder dan een seconde per pagina.
  • Heb je alle video’s van een profiel met paginering nodig? Dan is Methode 2 de juiste keuze, maar houd rekening met onderhoud wanneer TikTok zijn API-parameters aanpast.
  • Heb je te maken met login-walls, CAPTCHA’s of wil je maximale robuustheid? Gebruik Methode 3 met Playwright. Het is trager en zwaarder, maar TikTok kan het het lastigst blokkeren.

In de praktijk begin ik vaak met Methode 1 en schakel ik pas over naar Methode 2 of 3 als ik tegen beperkingen aanloop. Dat houdt de infrastructuur simpel en de kosten laag.

Geen Python nodig? Scrape TikTok-video’s met no-code tools

Veel mensen die zoeken op “scrape TikTok videos with Python” hebben eigenlijk helemaal geen Python nodig. Ze hebben de data nodig. Als je een marketinganalist bent die videometadata van een paar concurrentieprofielen wil ophalen, of een merkmanager die vermeldingen volgt, dan is een Python-omgeving opzetten met proxy-rotatie en signature-handling waarschijnlijk overkill.

python-vs-nocode-ai-comparison.webp

Hier is een eerlijke vergelijking van de opties:

AanpakVaardigheidsniveauKostenOnderhoudBeste voor
Python (zelf bouwen)Gemiddeld+Gratis (+ proxykosten)Hoog (scripts breken)Volledige controle, maatwerk-pijplijnen
Thunderbit (Chrome-extensie)BeginnerGratis tier beschikbaarGeen (AI leest de site elke keer opnieuw)Snel videodata ophalen, export naar Sheets/Excel
Apify TikTok ScraperBeginnerBetaald (per run)Laag (onderhouden door Apify)Bulkautomatisering op schema
TikAPIOntwikkelaarBetaald abonnementMiddelApps bouwen bovenop TikTok-data

Hoe Thunderbit TikTok-scraping aanpakt

is de AI-webscraper die we bij Thunderbit hebben gebouwd, en die werkt anders dan traditionele scrapingtools. In plaats van te vertrouwen op vooraf ingestelde CSS-selectors of XPath-regels (die stukgaan zodra TikTok zijn layout aanpast), leest Thunderbit’s AI de pagina telkens opnieuw en stelt relevante kolommen voor — beschrijving, likes, hashtags, video-URL, auteur, enzovoort.

De workflow bestaat echt uit twee klikken:

  1. Open een TikTok-profiel in Chrome, klik op de Thunderbit-extensie en kies “AI Suggest Fields”. Thunderbit scant de pagina en stelt een tabelstructuur voor.
  2. Controleer de voorgestelde kolommen, pas ze indien nodig aan en klik op “Scrape”.

De data exporteert direct naar Google Sheets, Excel, Airtable of Notion. Geen CSS-selectors om te onderhouden, geen code om te debuggen, geen proxyconfiguratie. Voor de marketinganalist die videometadata van een handvol profielen nodig heeft, is dit aantoonbaar sneller dan een Python-omgeving opzetten — en het breekt niet telkens wanneer TikTok zijn frontend bijwerkt (wat volgens community-rapporten om de paar weken gebeurt).

Thunderbit ondersteunt ook — het kan elke individuele videopagina bezoeken om je datatabel te verrijken met extra details zoals volledige commentaantallen, muziekinformatie of videoduur.

Je kunt het gratis proberen via de . Meer weten over hoe het werkt? Bekijk ons .

Juridische en ethische richtlijnen voor TikTok-scraping

Geen enkele van de hoogst scorende tutorials over dit onderwerp bespreekt de legaliteit, wat opvallend is gezien het feit dat TikTok actief juridische stappen heeft ondernomen tegen scrapingdiensten. Dit moet je weten.

TikTok’s Servicevoorwaarden (§ 4.1) verbieden expliciet geautomatiseerde toegang. Overtreding van de voorwaarden is contractbreuk, geen strafbaar feit — maar het kan wel leiden tot accountblokkades, IP-blokkades of civiele procedures.

Het juridische landschap is minder streng dan veel mensen denken voor openbare data. Een belangrijk precedent is Meta Platforms v. Bright Data (N.D. Cal., jan. 2024), waarin de rechtbank oordeelde dat het scrapen van publiek toegankelijke data terwijl je bent uitgelogd niet in strijd is met Meta’s Servicevoorwaarden. Meta liet de zaak vallen en zag af van hoger beroep. De eerdere hiQ v. LinkedIn-uitspraak van het Ninth Circuit (na Van Buren opnieuw bevestigd) stelde vast dat het scrapen van publiek toegankelijke data geen schending van de CFAA is — al heeft hiQ uiteindelijk geschikt, $500K betaald en ingestemd met een permanent verbod, wat laat zien dat handhaving van voorwaarden nog steeds hard kan aankomen.

GDPR en CCPA zijn van toepassing als je persoonsgegevens verzamelt van EU- of Californische gebruikers. Openbare posts scrapen is één ding; databases bouwen met persoonlijke informatie van individuele gebruikers is iets heel anders.

Praktische richtlijnen:

  • Beperk je requests in tempo (bestook TikTok’s servers niet)
  • Scrape geen privé-accounts of content van minderjarigen
  • Verspreid auteursrechtelijk beschermde video’s niet commercieel opnieuw
  • Respecteer robots.txt (TikTok verbiedt de meeste geautomatiseerde crawls)
  • Video’s downloaden voor eigen onderzoek of analyse is iets anders dan ze opnieuw posten — maak dat onderscheid goed

Disclaimer: Dit is educatieve content, geen juridisch advies. Als je een commercieel product bouwt op basis van gescrapete TikTok-data, raadpleeg dan een jurist.

Afronding: belangrijkste conclusies

TikTok-scraping in 2025 is een bewegend doelwit. De anti-botstack van het platform behoort tot de meest geavanceerde op het web, en naïeve aanpakken (platte requests, door ChatGPT gegenereerde snippets, verouderde tutorials) zullen mislukken. Maar met de juiste methode is het absoluut haalbaar.

Dit zijn de kernpunten:

  • Methode 1 (verborgen JSON) is het snelst en eenvoudigst — begin hier voor snelle profielscrapes.
  • Methode 2 (interne API) geeft je paginering en bulktoegang, maar vraagt het meeste onderhoud omdat endpoints en signaturevereisten regelmatig wijzigen.
  • Methode 3 (Playwright) is het meest robuust tegen anti-botmaatregelen, maar kost snelheid en resources.
  • Alle drie de methodes kunnen videodownload-URL’s extraheren — en deze gids is de enige die je ook echt laat zien hoe je de .mp4-bestanden met de juiste headers downloadt.
  • Voor niet-technische gebruikers biedt een echt snellere route naar dezelfde data, zonder code te schrijven of te onderhouden. De AI-aanpak betekent dat het niet stukgaat wanneer TikTok zijn layout aanpast — wat volgens community-rapporten vaker gebeurt dan iedereen lief is.

Als je zonder Python-setup wilt starten, — de gratis versie is genoeg om het op een paar profielen te testen en te zien of het in je workflow past. Voor wie wél met Python aan de slag gaat: begin met Methode 1, valideer je data en schaal daarna op.

Wil je dieper duiken in webscraping-technieken? Bekijk dan onze gidsen over , en .

Veelgestelde vragen

Is het legaal om TikTok-video’s met Python te scrapen?

Het scrapen van publiek toegankelijke data zit juridisch in een grijs gebied, niet in een glashelder verbod. De uitspraak Meta v. Bright Data (2024) ondersteunt de stelling dat het scrapen van openbare data terwijl je bent uitgelogd niet in strijd is met de servicevoorwaarden van het platform. TikTok’s voorwaarden verbieden echter expliciet geautomatiseerde toegang, en GDPR/CCPA-verplichtingen gelden voor persoonsgegevens. Het is niet illegaal in de manier waarop veel mensen vrezen, maar ook zeker niet risicoloos. Raadpleeg een juridisch deskundige voor jouw specifieke situatie.

Wat is de beste Python-library voor TikTok-scraping?

Dat hangt af van je aanpak af. Voor het extraheren van verborgen JSON (Methode 1) heb je genoeg aan requests + beautifulsoup4. Voor interne API-calls (Methode 2) werken requests of httpx. Voor browserautomatisering (Methode 3) is playwright momenteel de standaard — het heeft Selenium inmiddels ingehaald in populariteit voor nieuwe scrapingprojecten, met tegenover Selenium’s ~53 miljoen. De TikTok-Api wrapper (~6,3K GitHub-stars) is ook het overwegen waard als je een hoger abstractieniveau wilt, al kan die gevoelig zijn voor veranderingen.

Kan ik TikTok-video’s zonder watermark downloaden met Python?

Ja. TikTok’s eigen data bevat een playAddr-URL die doorgaans een versie van de video zonder de standaard watermark-overlay levert. Deze gids laat zien hoe je die URL uit elk van de drie methodes haalt en de .mp4 downloadt met de juiste headers. Het veld downloadAddr bevat daarentegen de watermark.

Waarom geeft mijn TikTok-scraper lege data terug?

De meest voorkomende oorzaak is dat TikTok JavaScript nodig heeft om content te renderen. Een simpele requests.get() haalt alleen de shell-HTML op — de echte data zit óf in een verborgen JSON script-tag (Methode 1) óf wordt dynamisch geladen via JavaScript (Methode 3). Krijg je lege HTML, probeer dan eerst Methode 1. Werkt dat niet, controleer je headers (een ontbrekende Referer is de nummer 1 oorzaak van 403-fouten) of schakel over naar Methode 3 met Playwright.

Hoe voorkom ik dat ik geblokkeerd word bij TikTok-scraping?

Gebruik realistische browserheaders (inclusief User-Agent, Referer en Accept-Language), roteer residentiële of mobiele proxies (datacenter-IP’s worden binnen minuten gemarkeerd), voeg willekeurige vertragingen toe tussen requests (minimaal 1–3 seconden) en probeer niet op extreem hoge volumes te scrapen. Methode 3 (Playwright) biedt de hoogste weerstand tegen blokkades omdat het een echte browsersessie nabootst. Voor serieus volume moet je rekening houden met proxykosten — instap-residentiële proxies kosten bij grote aanbieders ongeveer .

  • Meer leren
Topics
TikTok scrapen PythonTikTok data-extractie PythonPython TikTok scraper-scriptHoe je TikTok-video's scrapt met Python
Inhoudsopgave

Probeer Thunderbit

Scrape leads en andere data in slechts 2 klikken. Aangedreven door AI.

Thunderbit ophalen Het is gratis
Data extraheren met AI
Zet data eenvoudig over naar Google Sheets, Airtable of Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week