Lær at scrape TikTok-videoer med Python

Sidst opdateret den April 15, 2026

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:

  1. At hente videometadata: Tekster, hashtags, likes, kommentarer, delinger, visninger, datoer og forfatterinfo. Det er det, de fleste tutorials fokuserer på.
  2. 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:

BrugsscenarieHvad du scraperHvem det er til
Influencer- og markedsundersøgelserEngagement-rate, følgertal, indholdsformater, hashtag-performanceMarketingteams, bureauer
Content-strategiTrendende hashtags, virale videoformater, publiceringsfrekvensContent creators, social media managers
BrandovervågningOmtaler, kampagnerækkevidde, publikumsstemningBrand managers, PR-teams
KonkurrentanalyseKonkurrenters videoperformance, annoncecreatives, TikTok Shop-listerE-commerce, produktteams
MarkedsanalyseNye trends, brugeradfærd, produktopdagelseAnalytikere, hedgefonde, researchfirmaer
Arkivering og complianceVideofiler til intern gennemgang eller dokumentationJura, 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.

tiktok-anti-bot-wall.webp

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:

SymptomSandsynlig årsagMetode der løser det
Tom HTML / ingen dataJS-rendret indhold; requests kan ikke køre JavaScriptMetode 1 (skjult JSON) eller Metode 3 (Playwright)
403 / Adgang nægtetManglende eller forkerte headers; anti-bot-detektionMetode 1 med korrekte headers
Data virker én gang og stopper såRate limiting / IP-blokeringProxy-rotation (alle metoder)
Login-væg dukker opSession-/cookie-kravMetode 3 (browser med gemt session)
ChatGPT-genereret kode giver intet outputTikTok-strukturen har ændret sig siden modellens træningsdataAlle 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:

  1. Skjult JSON-udtræk — Parse __UNIVERSAL_DATA_FOR_REHYDRATION__ script-tagget, der ligger indlejret i TikTok-sider. Hurtigst, enklest, ingen browser nødvendig.
  2. TikToks interne API — Kald det udokumenterede /api/post/item_list/-endpoint direkte for bulk-data med cursor-baseret paginering.
  3. 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 (eller httpx)
  • beautifulsoup4 (eller parsel)
  • 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 under userInfo.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-Bogus eller 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 din msToken sandsynligvis 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() &gt; 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 watermark
  • downloadAddr — 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:

KriteriumMetode 1: Skjult JSONMetode 2: Internt APIMetode 3: Playwright
SværhedsgradBegynderLet øvetLet øvet
HastighedHurtig (1 request pr. side)Hurtig (JSON API)Langsom (fuld side-rendering)
Anti-bot robusthedMellemLav (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 scrollNej (kun første side)Ja (cursor-paginering)Ja (scroll-simulering)
Proxy nødvendig i stor skalaJaJaJa
Kræver vedligeholdelseMellem (JSON-struktur ændrer sig)Høj (endpoints/signaturer ændrer sig ofte)Lav-mellem (browseren tilpasser sig)
Bedst tilHurtige engangsscrapes af profilerBulk dataudtræk, alle videoerIndhold 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.

python-vs-nocode-ai-comparison.webp

Her er en ærlig sammenligning af mulighederne:

TilgangFærdighedsniveauPrisVedligeholdelseBedst til
Python (DIY)Let øvet+Gratis (+ proxy-omkostninger)Høj (scripts går i stykker)Fuld kontrol, specialbyggede workflows
Thunderbit (Chrome-extension)BegynderGratis plan tilgængeligIngen (AI læser siden frisk hver gang)Hurtig udtræk af videodata, eksport til Sheets/Excel
Apify TikTok ScraperBegynderBetalt (pr. kørsel)Lav (vedligeholdes af Apify)Bulk-automatisering på fast plan
TikAPIUdviklerBetalt abonnementMellemBygge 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:

  1. 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.
  2. 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
Topics
Scrape Tiktok pythonTiktok data extraction pythonPython Tiktok scraper scriptHow to scrape Tiktok videos with python
Indholdsfortegnelse

Prøv Thunderbit

Hent leads og andre data med kun 2 klik. Drevet af AI.

Hent Thunderbit Det er gratis
Udtræk data med AI
Overfør nemt data til Google Sheets, Airtable eller Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week