TikTok har nu omkring , og creators lægger anslået 23 millioner videoer op hver eneste dag. Hvis du nogensinde har prøvet at hente data bare fra en lille brøkdel af den strøm, kender du sikkert frustrationen.
Det plejer at foregå sådan her: Du søger på "scrape TikTok videos with Python", kopierer et snippet fra en tutorial (eller får ChatGPT til at skrive det), kører det — og får… ingenting. Tom HTML. En 403-fejl. Eller det frygtede "Process finished with exit code 0" uden output. Jeg har set præcis den samme situation igen og igen i GitHub-issues og Reddit-tråde, og det er derfor, jeg har lavet den her guide. Vi gennemgår tre Python-metoder, der faktisk virker i 2025, en komplet walkthrough til at downloade de rigtige .mp4-videofiler (ikke bare metadata — som er der, hvor stort set alle andre guides stopper), og en sammenligningstabel, så du kan vælge den rigtige løsning til dit behov. Hvis du slet ikke har brug for Python, viser jeg også no-code alternativer som , der kan levere de samme data på cirka to klik.
Hvad betyder det egentlig at "scrape TikTok-videoer"?
Inden vi går i gang med kode, er det værd at slå fast, hvad folk mener, når de siger "scrape TikTok videoer" — for udtrykket dækker faktisk to ret forskellige ting:
- At hente videometadata: Tekster, hashtags, likes, kommentarer, delinger, visninger, datoer og forfatterinfo. Det er det, de fleste tutorials fokuserer på.
- At downloade de faktiske videofiler (.mp4): At få selve videoen gemt på din computer. Det er det, de fleste egentlig ønsker, når de søger på "scrape TikTok videos" — og det er den del, næsten ingen dækker.
Denne guide dækker begge dele. Alle metoderne nedenfor kan både hente metadata og give dig download-URL’erne, du skal bruge for at gemme .mp4-filerne.
Hvorfor scrape TikTok-videoer med Python?
Med og TikTok Shop, der genererer , er forretningsværdien i TikTok-data betydelig. Her er de use cases, jeg ser oftest:
| Brugsscenarie | Hvad du scraper | Hvem det er til |
|---|---|---|
| Influencer- og markedsundersøgelser | Engagement-rate, følgertal, indholdsformater, hashtag-performance | Marketingteams, bureauer |
| Content-strategi | Trendende hashtags, virale videoformater, publiceringsfrekvens | Content creators, social media managers |
| Brandovervågning | Omtaler, kampagnerækkevidde, publikumsstemning | Brand managers, PR-teams |
| Konkurrentanalyse | Konkurrenters videoperformance, annoncecreatives, TikTok Shop-lister | E-commerce, produktteams |
| Markedsanalyse | Nye trends, brugeradfærd, produktopdagelse | Analytikere, hedgefonde, researchfirmaer |
| Arkivering og compliance | Videofiler til intern gennemgang eller dokumentation | Jura, compliance, bureauer |
De kommercielle konsekvenser er reelle: Omsætningen fra TikTok-annoncer i USA forventes at nå 23,4 milliarder dollars i 2026, og affiliate creators står for i de største TikTok Shop-kategorier. Hvis du arbejder med e-commerce eller influencer marketing, har de her data altså direkte økonomisk værdi.
Hvorfor din basale Python-kode fejler på TikTok
Hvis du allerede har prøvet noget i stil med dette uden held, er du bestemt ikke alene:
1import requests
2from bs4 import BeautifulSoup
3resp = requests.get("https://www.tiktok.com/@someuser")
4soup = BeautifulSoup(resp.text, "html.parser")
5# ...og så er der ikke noget brugbart i HTML'en
Forklaringen er ret enkel: TikTok er en af de sværeste platforme at scrape. Et almindeligt requests.get() giver dig mest en tom HTML-skal, fordi det faktiske indhold bliver rendret af JavaScript i browseren. Oven i det bruger TikTok et aggressivt anti-bot-system med adfærdsdetektion, TLS-fingerprinting, en til at generere request-signaturer og dynamiske CSS-selectors, der ændrer sig uden varsel.

Ifølge Imperva 2025 Bad Bot Report overhalede automatiseret trafik menneskelig trafik for første gang i 2024 — bots står nu for . TikTok er meget opmærksom på det og har bygget sine forsvar derefter.
Her er en hurtig fejlsøgningstabel, så du kan finde ud af, hvad der går galt, og springe direkte til den rigtige metode:
| Symptom | Sandsynlig årsag | Metode der løser det |
|---|---|---|
| Tom HTML / ingen data | JS-rendret indhold; requests kan ikke køre JavaScript | Metode 1 (skjult JSON) eller Metode 3 (Playwright) |
| 403 / Adgang nægtet | Manglende eller forkerte headers; anti-bot-detektion | Metode 1 med korrekte headers |
| Data virker én gang og stopper så | Rate limiting / IP-blokering | Proxy-rotation (alle metoder) |
| Login-væg dukker op | Session-/cookie-krav | Metode 3 (browser med gemt session) |
| ChatGPT-genereret kode giver intet output | TikTok-strukturen har ændret sig siden modellens træningsdata | Alle 3 metoder (opdaterede tilgange) |
Rate limit-grænsen ligger cirka på 30–60 requests i minuttet pr. IP, før du begynder at få soft blocks eller CAPTCHAs. Datacenter-IP’er bliver flagget i løbet af få minutter — residential eller mobile proxies er i praksis et must, hvis du vil hente data i volumen.
Overblik: 3 metoder til at scrape TikTok-videoer med Python
Her er planen. Hver metode har sine fordele og ulemper, og jeg gennemgår dem alle med kode, der virker:
- Skjult JSON-udtræk — Parse
__UNIVERSAL_DATA_FOR_REHYDRATION__script-tagget, der ligger indlejret i TikTok-sider. Hurtigst, enklest, ingen browser nødvendig. - TikToks interne API — Kald det udokumenterede
/api/post/item_list/-endpoint direkte for bulk-data med cursor-baseret paginering. - Browserautomatisering med Playwright — Rendr sider i en headless browser for at håndtere infinite scroll, dynamisk indhold og login-vægge.
Alle tre metoder kan også bruges til at downloade de faktiske .mp4-videofiler — det gennemgår jeg i et særskilt afsnit efter metode-walkthroughs. Til sidst kommer en fuld sammenligning, så du kan træffe et informeret valg.
Metode 1: Scrape TikTok-videoer via skjult JSON (begyndervenlig)
Det her er den metode, jeg anbefaler at starte med. TikTok indlejrer en stor JSON-blok i et <script>-tag med id’et __UNIVERSAL_DATA_FOR_REHYDRATION__ på stort set hver sideindlæsning. Blokken indeholder alle de profil- og videodata, som front-end JavaScript normalt ville rendere — hvilket betyder, at du kan hente dem med ét enkelt HTTP-kald, uden browser.
Det skal du bruge
- Python 3.8+
requests(ellerhttpx)beautifulsoup4(ellerparsel)- Korrekte headers:
User-Agent,Referer,Accept-Language
Installér afhængighederne:
1pip install requests beautifulsoup4
Trin for trin: Hent TikTok-videodata fra script-tagget
Trin 1: Send en GET-request med realistiske browser-headers.
Det er her, de fleste begynder at fejle. Hvis du sender et rent requests.get() uden headers, svarer TikTok ofte med en 403 eller en CAPTCHA-side. Du skal mindst bruge en aktuel browser-User-Agent og en 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)
Trin 2: Parse HTML’en og find hydration script-tagget.
1soup = BeautifulSoup(resp.text, "html.parser")
2script_tag = soup.find("script", id="__UNIVERSAL_DATA_FOR_REHYDRATION__")
Hvis script_tag er None, har TikTok enten blokeret dig (tjek statuskoden) eller ændret tag-id’et (sjældent, men muligt).
Trin 3: Indlæs script-indholdet som JSON.
1data = json.loads(script_tag.string)
Trin 4: Navigér i JSON-strukturen og hent videodata.
Strukturen ligger under __DEFAULT_SCOPE__. For en profilside:
1user_detail = data["__DEFAULT_SCOPE__"]["webapp.user-detail"]
2user_info = user_detail["userInfo"]
3# Profilstatistik
4stats = user_info["stats"]
5print(f"Followers: {stats['followerCount']}, Likes: {stats['heartCount']}")
6# Videoliste (første side af videoer)
7item_list = user_detail.get("itemList", [])
8for video in item_list:
9 print(video["desc"]) # Caption
10 print(video["stats"]["playCount"]) # Views
11 print(video["video"]["playAddr"]) # Video download URL (uden watermark)
12 print(video["video"]["downloadAddr"]) # Video download URL (med watermark)
Trin 5: Hent video-download-URL’er.
Feltet playAddr giver typisk en renere version af videoen (ofte uden TikTok-watermark-overlay), mens downloadAddr indeholder den standard watermarked version. Begge er direkte URL’er til .mp4-filen — men de kræver bestemte headers for at kunne downloades (det gennemgår vi i download-afsnittet nedenfor).
Nu burde du have en liste af videometadata-objekter, der hver især indeholder caption, stats, oprettelsestidspunkt, hashtags (i challenges[] og textExtra) samt direkte video-URL’er.
Begrænsninger ved metoden med skjult JSON
- Henter kun data fra den første sideindlæsning — typisk de første ~30 videoer på en profil
- Kan ikke håndtere infinite scroll eller paginering (der er ingen "næste side" at anmode om)
- Hvis TikTok ændrer script-tag-id’et eller JSON-strukturen, går parseren i stykker (det sker jævnligt — hjælper med at fange det tidligt)
- Bedst til: hurtige profil-scrapes, engangshentninger eller når du kun har brug for de nyeste videoer
Metode 2: Scrape TikTok-videoer via det interne API
TikToks front-end loader ikke alle videoer på én gang — den laver XHR-kald til interne API-endpoints, mens du scroller. Det vigtigste endpoint til bruger-videoer er /api/post/item_list/. Du kan kalde det direkte fra Python, hvilket giver dig cursor-baseret paginering og adgang til alle videoer på en profil (ikke kun den første side).
Sådan finder du det interne API-endpoint
Åbn Chrome DevTools på en TikTok-profilside, gå til Network-fanen, filtrér på XHR og scroll ned. Du vil se requests til URL’er som:
1https://www.tiktok.com/api/post/item_list/?WebIdLastTime=...&aid=1988&count=35&cursor=0&secUid=...
De vigtigste parametre er:
secUid— profilens unikke ID (du kan hente det fra metode 1’s JSON underuserInfo.user.secUid)cursor— paginerings-offset (starter på0, og hvert svar giver næste cursor-værdi)count— antal elementer pr. side (typisk 30–35)
Trin for trin: Kald TikToks interne API med Python
Trin 1: Hent secUid for den ønskede profil.
Det kan du få fra den skjulte JSON (metode 1) eller fra profilsidens HTML.
Trin 2: Byg og send API-requesten.
1import requests
2import json
3sec_uid = "MS4wLjABAAAA..." # Fra metode 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()
Trin 3: Parse svaret.
Hvert element i data["itemList"] indeholder den samme videostruktur som i metode 1 — desc, stats, video.playAddr, video.downloadAddr osv.
Trin 4: Paginer gennem alle videoer.
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"Fetched {len(items)} videos, total: {len(all_videos)}, hasMore: {has_more}")
13print(f"Total videos scraped: {len(all_videos)}")
Hver iteration returnerer den næste batch og en ny cursor. Løkken fortsætter, indtil hasMore er False.
Begrænsninger ved metoden med det interne API
- TikTok ændrer disse endpoints og nødvendige parametre ofte — det er den metode, der kræver mest vedligeholdelse. De seneste måneder er nogle requests begyndt at kræve
msToken,X-Boguseller andre signaturparametre, som TikToks genererer (spoiler: det er ikke trivielt at genskabe i ren Python). - Kan kræve sessionscookies eller ekstra tokens for visse datatyper
- IP-baseret rate limiting gælder stadig — proxy-rotation anbefales
- Hvis du begynder at få tomme
itemList-arrays, er dinmsTokensandsynligvis udløbet eller forældet (den roterer cirka hvert 10. sekund i browseren) - Bedst til: bulk-udtræk, når du skal bruge alle videoer fra en profil, og metode 1’s begrænsning til første side ikke er nok
Metode 3: Scrape TikTok-videoer med Playwright (browserautomatisering)
Når de to første metoder løber ind i barrierer — login-krav, CAPTCHAs eller signaturparametre, du ikke kan genskabe — er Playwright fallback-løsningen. Den starter en rigtig (headless) browser, navigerer på TikTok som en menneskelig bruger og kan håndtere JavaScript-rendring, infinite scroll og endda autentificerede sessioner.
Sådan sætter du Playwright op til TikTok-scraping
Installér Playwright og browser-binaries:
1pip install playwright
2playwright install firefox
Jeg anbefaler Firefox frem for Chromium til TikTok-scraping. Community-tests viser konsekvent med Firefox, og TikToks bot-detektion er særligt aggressiv over for headless browsere baseret på Chromium.
For ekstra stealth kan du overveje at kombinere Playwright med (en patched Playwright-fork) eller (Firefox ændret på C++-niveau for at undgå detektion). I opnår Camoufox næsten perfekte stealth-scorer mod store bot-detektionstjenester.
Trin for trin: Scrape TikTok-profilvideoer med Playwright
Trin 1: Start en headless Firefox-browser og gå til profilen.
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")
Trin 2: Vent på, at video-gitteret loader.
1 # Vent på, at videoelementer dukker op
2 await page.wait_for_selector('[data-e2e="user-post-item"]', timeout=15000)
Hvis TikTok viser et "Something went wrong"-overlay, kan du være nødt til at klikke på en retry-knap:
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)
Trin 3: Hent data fra den skjulte JSON (også i Playwright).
Den mest stabile løsning er stadig at hente hydration-JSON’en, selv når du bruger en browser:
1 script_el = page.locator("#__UNIVERSAL_DATA_FOR_REHYDRATION__")
2 raw_json = await script_el.inner_text()
3 data = json.loads(raw_json)
4 # Samme JSON-navigation som i metode 1
5 user_detail = data["__DEFAULT_SCOPE__"]["webapp.user-detail"]
6 videos = user_detail.get("itemList", [])
Trin 4: Håndter infinite scroll for flere videoer.
Hvis du skal bruge mere end de første ~30 videoer, kan du scrolle ned og opsnappe flere XHR-svar:
1 all_videos = list(videos)
2 # Opsnap API-svar mens vi scroller
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 ned for at trigge flere indlæsninger
13 for _ in range(5): # Tilpas antal scroll efter behov
14 await page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
15 await asyncio.sleep(2)
16 # Saml videoer fra opsnappede svar
17 for api_resp in api_responses:
18 items = api_resp.get("itemList", [])
19 all_videos.extend(items)
20 print(f"Total videos: {len(all_videos)}")
21 await browser.close()
22 return all_videos
23# Kør det
24videos = asyncio.run(scrape_tiktok_profile("charlidamelio"))
Nu burde du have en liste af videoobjekter både fra den første indlæsning og fra yderligere sider, der blev hentet via scroll.
Begrænsninger ved Playwright-metoden
- Langsomste metode med afstand (fuld side-rendering, netværkssvar og scroll-pauser)
- Højere ressourceforbrug — hver browserinstans bruger betydelig hukommelse og CPU
- Stadig udsat for IP-baseret blokering i stor skala — brug proxy-rotation
- Bedst til: komplekse interaktioner, indhold bag login, CAPTCHA-håndtering eller når metode 1 og 2 er blokeret
Sådan downloader du TikTok-videoer (.mp4) med Python
Her er afsnittet, der udfylder det største hul i næsten alle andre TikTok-scrapingguides. At hente metadata er nyttigt, men de fleste, der søger på "scrape TikTok videos", vil have selve videofilerne.
TikTok indlejrer download-URL’er i videoobjektet:
playAddr— typisk versionen uden watermark eller med et mindre watermarkdownloadAddr— den version TikTok selv bruger til download i appen (inkluderer TikTok-watermark)
Begge URL’er er tidsfølsomme og udløber efter kort tid (ofte nogle få timer), så du skal downloade dem hurtigt efter udtræk.
Trin for trin: Download en TikTok-videofil
Trin 1: Hent video-URL’en fra en af de tre metoder ovenfor.
1video_url = video["video"]["playAddr"] # Version uden watermark
2# eller
3video_url = video["video"]["downloadAddr"] # Med watermark
Trin 2: Send en GET-request med de rigtige headers.
Det er her, mange går galt. Hvis du bare bruger requests.get(video_url), får du en 403. TikTok tjekker Referer-headeren og forventer en browser-lignende 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)
Trin 3: Skriv indholdet til en .mp4-fil.
Brug stream=True og skriv i chunks — TikTok-videoer kan være store, og du vil ikke indlæse hele filen i hukommelsen:
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): # 1MB chunks
5 if chunk:
6 f.write(chunk)
7print(f"Downloaded: {filename}")
Nu burde du have en afspilbar .mp4-fil på din lokale computer.
Watermark vs. no-watermark downloads
TikTok gemmer både en watermarked og en non-watermarked version af hver video. playAddr-URL’en giver ofte en renere version (den som spilleren bruger), mens downloadAddr indeholder TikTok-watermark-overlayet med creatorens brugernavn.
Et hurtigt etisk notat: Watermarket er der for at kreditere creatoren. Hvis du downloader videoer til research, analyse eller intern gennemgang, er det som udgangspunkt fint at bruge playAddr. Hvis du vil genudgive eller repost’e indholdet, rejser fjernelse af creator-attribution både etiske og ophavsretlige spørgsmål. Mere om det i det juridiske afsnit nedenfor.
Hvis du vil have en mere robust download-pipeline, kan du overveje — dens TikTok-extractor håndterer signaturberegninger og URL-opløsning automatisk, så du ikke selv skal styre headers og token-udløb.
Sammenligning side om side: Hvilken Python-metode skal du bruge?
Her er den sammenligningstabel, jeg selv ville ønske, jeg havde, da jeg begyndte at arbejde med TikTok-scraping:
| Kriterium | Metode 1: Skjult JSON | Metode 2: Internt API | Metode 3: Playwright |
|---|---|---|---|
| Sværhedsgrad | Begynder | Let øvet | Let øvet |
| Hastighed | Hurtig (1 request pr. side) | Hurtig (JSON API) | Langsom (fuld side-rendering) |
| Anti-bot robusthed | Mellem | Lav (endpoints ændrer sig) | Høj (imiterer rigtig browser) |
| Downloader video .mp4? | Ja (udtræk playAddr) | Ja (URL i svaret) | Ja (opsnap netværk) |
| Håndterer infinite scroll | Nej (kun første side) | Ja (cursor-paginering) | Ja (scroll-simulering) |
| Proxy nødvendig i stor skala | Ja | Ja | Ja |
| Kræver vedligeholdelse | Mellem (JSON-struktur ændrer sig) | Høj (endpoints/signaturer ændrer sig ofte) | Lav-mellem (browseren tilpasser sig) |
| Bedst til | Hurtige engangsscrapes af profiler | Bulk dataudtræk, alle videoer | Indhold bag login eller komplekst indhold |
Min anbefaling:
- Skal du bare have et hurtigt øjebliksbillede af en profil? Start med metode 1. Det tager cirka 30 sekunder at sætte op og returnerer data på under et sekund pr. side.
- Skal du have alle videoer fra en profil med paginering? Metode 2 er vejen frem, men vær klar på vedligeholdelse, når TikTok ændrer sine API-parametre.
- Står du med login-vægge, CAPTCHAs eller har brug for maksimal robusthed? Metode 3 med Playwright. Den er langsommere og tungere, men det er også den sværeste for TikTok at blokere.
I praksis starter jeg ofte med metode 1 og går kun videre til metode 2 eller 3, når jeg rammer begrænsninger. Det holder infrastrukturen enkel og omkostningerne lave.
Har du ikke brug for Python? Scrape TikTok-videoer med no-code værktøjer
Mange, der søger på "scrape TikTok videos with Python", har faktisk ikke brug for Python. De har brug for data. Hvis du er marketinganalytiker og vil hente videometadata fra et par konkurrentprofiler, eller brand manager og vil overvåge omtaler, er det overkill at sætte et Python-miljø op med proxy-rotation og signaturhåndtering.

Her er en ærlig sammenligning af mulighederne:
| Tilgang | Færdighedsniveau | Pris | Vedligeholdelse | Bedst til |
|---|---|---|---|---|
| Python (DIY) | Let øvet+ | Gratis (+ proxy-omkostninger) | Høj (scripts går i stykker) | Fuld kontrol, specialbyggede workflows |
| Thunderbit (Chrome-extension) | Begynder | Gratis plan tilgængelig | Ingen (AI læser siden frisk hver gang) | Hurtig udtræk af videodata, eksport til Sheets/Excel |
| Apify TikTok Scraper | Begynder | Betalt (pr. kørsel) | Lav (vedligeholdes af Apify) | Bulk-automatisering på fast plan |
| TikAPI | Udvikler | Betalt abonnement | Mellem | Bygge apps oven på TikTok-data |
Sådan håndterer Thunderbit TikTok-scraping
er den AI web scraper, vi har bygget hos Thunderbit, og den fungerer anderledes end traditionelle scraping-værktøjer. I stedet for at basere sig på foruddefinerede CSS-selectors eller XPath-regler (som går i stykker, hver gang TikTok ændrer layout), læser Thunderbits AI siden på ny hver gang og foreslår relevante kolonner — caption, likes, hashtags, video-URL, forfatter osv.
Workflowet er virkelig to klik:
- Gå til en TikTok-profil i Chrome, klik på Thunderbit-udvidelsen, og tryk på "AI Suggest Fields." Thunderbit scanner siden og foreslår en tabelstruktur.
- Gennemgå de foreslåede kolonner, justér hvis nødvendigt, og klik på "Scrape."
Data eksporteres direkte til Google Sheets, Excel, Airtable eller Notion. Ingen CSS-selectors at vedligeholde, ingen kode at debugge, ingen proxy-konfiguration. For marketinganalytikeren, der skal have videometadata fra en håndfuld profiler, er det mærkbart hurtigere end at sætte et Python-miljø op — og det går ikke i stykker, hver gang TikTok opdaterer sit front-end (hvilket ifølge community-rapporter sker med få ugers mellemrum).
Thunderbit understøtter også — den kan besøge hver enkelt videoside og berige din datatabel med flere detaljer som fulde kommentarantal, musikinfo eller videolængde.
Du kan prøve det gratis via . Læs mere om, hvordan det virker, på vores .
Juridiske og etiske retningslinjer for scraping af TikTok
Nul af de højt rangerende tutorials om emnet taler om lovgivning, hvilket er en markant udeladelse, når man tænker på, at TikTok aktivt har ført retssager mod scraping-tjenester. Her er det, du skal vide.
TikToks Terms of Service (§ 4.1) forbyder udtrykkeligt automatiseret adgang. At bryde en TOS er kontraktbrud, ikke en straffesag — men det kan føre til kontolukninger, IP-blokeringer eller civile søgsmål.
Det juridiske landskab er mere tilladende, end mange tror, når det gælder offentlige data. Den vigtigste præcedens er Meta Platforms v. Bright Data (N.D. Cal., jan. 2024), hvor retten fastslog, at scraping af offentligt tilgængelige data, mens man er logget ud, ikke overtræder Metas Terms of Service. Meta droppede sagen og frafaldt anke. Den tidligere hiQ v. LinkedIn-afgørelse i Ninth Circuit (genbekræftet efter Van Buren) slog fast, at scraping af offentligt tilgængelige data ikke er en CFAA-overtrædelse — selvom hiQ til sidst indgik forlig, betalte 500.000 dollars og accepterede et permanent forbud, hvilket viser, at TOS-håndhævelse stadig kan bide.
GDPR og CCPA gælder, hvis du indsamler persondata fra brugere i EU eller Californien. At scrape offentlige opslag er én ting; at opbygge databaser over individuelle brugeres personlige oplysninger er noget helt andet.
Praktiske retningslinjer:
- Begræns din request-rate (undgå at bombardere TikToks servere)
- Scrape ikke private konti eller indhold fra mindreårige
- Genudgiv ikke ophavsretligt beskyttet videoinhold kommercielt
- Respekter
robots.txt(TikTok forbyder det meste automatiserede crawl) - At downloade videoer til personlig research eller analyse er noget andet end at repost’e dem — forstå forskellen
Ansvarsfraskrivelse: Dette er undervisningsmateriale, ikke juridisk rådgivning. Hvis du bygger et kommercielt produkt på scraped TikTok-data, bør du tale med en advokat.
Afslutning: De vigtigste pointer
TikTok-scraping i 2025 er et bevægeligt mål. Platformens anti-bot-lag er blandt de mest sofistikerede på nettet, og naive tilgange (almindelig requests, ChatGPT-genererede snippets, forældede tutorials) vil fejle. Men med den rigtige metode er det helt muligt.
Det her skal du tage med dig:
- Metode 1 (skjult JSON) er den hurtigste og enkleste — start her til hurtige profil-scrapes.
- Metode 2 (internt API) giver dig paginering og bulk-adgang, men kræver mest vedligeholdelse, fordi endpoints og signaturkrav ændrer sig.
- Metode 3 (Playwright) er mest robust over for anti-bot-foranstaltninger, men det koster på hastighed og ressourcer.
- Alle tre metoder kan hente video-download-URL’er — og denne guide er den eneste, der viser dig, hvordan du faktisk downloader .mp4-filerne med de rigtige headers.
- For ikke-tekniske brugere tilbyder en langt hurtigere vej til de samme data uden at skrive eller vedligeholde kode. Den AI-baserede tilgang betyder, at den ikke går i stykker, når TikTok ændrer layout — hvilket ifølge community-rapporter sker oftere, end nogen bryder sig om.
Hvis du vil i gang uden noget Python-setup, kan du — gratisplanen er nok til at teste det på et par profiler og se, om det passer ind i dit workflow. Hvis du går Python-vejen, så start med metode 1, valider dine data, og skaler derfra.
Vil du dykke dybere ned i webscraping-teknikker? Så tjek vores guides om , og .
Ofte stillede spørgsmål
Er det lovligt at scrape TikTok-videoer med Python?
Scraping af offentligt tilgængelige data befinder sig i en juridisk gråzone, ikke som en entydig ulovlig handling. Afgørelsen i Meta v. Bright Data (2024) understøtter synspunktet, at logged-out scraping af offentlige data ikke bryder platformens Terms of Service. TikToks TOS forbyder dog udtrykkeligt automatiseret adgang, og GDPR/CCPA-regler gælder for persondata. Det er ikke ulovligt på den måde, mange frygter, men det er heller ikke risikofrit. Tal med en jurist om dit konkrete use case.
Hvad er det bedste Python-bibliotek til TikTok-scraping?
Det afhænger af din tilgang. Til skjult JSON-udtræk (metode 1) er requests + beautifulsoup4 nok. Til interne API-kald (metode 2) fungerer requests eller httpx. Til browserautomatisering (metode 3) er playwright den nuværende standard — det har overhalet Selenium i nye scrapingprojekter med mod Seleniums ~53 millioner. TikTok-Api-wrapperen (~6,3K GitHub-stjerner) er også værd at overveje, hvis du vil have en højere abstraktion, men den kan være skrøbelig.
Kan jeg downloade TikTok-videoer uden watermark med Python?
Ja. TikToks egne data indeholder et playAddr-URL, som typisk giver en version af videoen uden det standard watermarked overlay. Denne guide viser, hvordan du udtrækker den URL med en af de tre metoder og downloader .mp4-filen med de rigtige headers. Feltet downloadAddr indeholder derimod watermarket.
Hvorfor returnerer min TikTok-scraper tomme data?
Den mest almindelige årsag er, at TikTok kræver JavaScript for at rendere indholdet. Et almindeligt requests.get() henter kun HTML-skallen — de faktiske data ligger enten i et skjult JSON script-tag (metode 1) eller bliver loadet dynamisk via JavaScript (metode 3). Hvis du får tom HTML, så prøv metode 1 først. Hvis det ikke virker, så tjek dine headers (manglende Referer er den hyppigste årsag til 403-fejl) eller gå videre til metode 3 med Playwright.
Hvordan undgår jeg at blive blokeret, når jeg scraper TikTok?
Brug realistiske browser-headers (inklusive User-Agent, Referer og Accept-Language), roter residential- eller mobile proxies (datacenter-IP’er bliver flagget i løbet af få minutter), tilføj tilfældige pauser mellem requests (mindst 1–3 sekunder), og undgå at scrape i ekstremt højt tempo. Metode 3 (Playwright) giver den højeste robusthed mod blokering, fordi den efterligner en rigtig browsersession. Ved større volumen bør du budgettere med proxy-omkostninger — entry-level residential proxies koster omkring hos større udbydere.
- Læs mere