Lær at scrape TikTok-videoer med Python

Sidst opdateret den April 14, 2026

TikTok har nu omkring , og skabere uploader anslået 23 millioner videoer hver eneste dag. Hvis du nogensinde har prøvet at indsamle data fra bare en lille bid af den strøm, kender du allerede frustrationen.

Det plejer at foregå sådan her: du søger på "scrape TikTok videos with Python", kopierer et kodeeksempel fra en tutorial (eller beder ChatGPT om at skrive et), kører det — og får ... ingenting. Tom HTML. Fejl 403. Eller den frygtede "Process finished with exit code 0" uden noget 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 denne guide. Vi gennemgår tre Python-metoder, der faktisk virker i 2025, en komplet guide til at downloade de rigtige .mp4-filer (ikke kun metadata — som er dér, de fleste 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, dækker jeg også no-code-alternativer som , der kan give dig de samme data på cirka to klik.

Hvad betyder det egentlig at "scrape TikTok-videoer"?

Før vi kaster os over koden, er det værd at præcisere, hvad folk mener, når de siger "scrape TikTok videos" — for udtrykket dækker over to meget forskellige ting:

  1. Udtræk af video-metadata: Captions, hashtags, like-tal, kommentar-tal, delingstal, visningstal, dato for opslag, oplysninger om skaberen. Det er det, de fleste tutorials fokuserer på.
  2. Download af selve videofilerne (.mp4): At få selve videoen gemt lokalt på din maskine. Det er faktisk det, de fleste reelt vil have, 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. Hver metode nedenfor kan både udtrække metadata og give dig de download-URL’er, du skal bruge for at gemme .mp4-filerne.

Hvorfor scrape TikTok-videoer med Python?

Med og TikTok Shop, der genererer , er der solide forretningsgrunde til at udnytte TikTok-data. Her er de use cases, jeg oftest ser:

| Use Case | Hvad du scraper | Hvem det er til | |---|---|---| | Influencer- og marketinganalyse | Engagement-rate, følgertal, indholdsformater, hashtag-performance | Marketingteams, bureauer | | Indholdsstrategi | Trendende hashtags, virale videoformater, posting-frekvens | Content creators, social media managers | | Brandovervågning | Omtaler, kampagnerækkevidde, publikumsstemning | Brand managers, PR-teams | | Konkurrentanalyse | Konkurrenters videoperformance, annoncekreativer, TikTok Shop-lister | E-commerce, produktteams | | Markedsanalyse | Nye trends, brugeradfærd, produktopdagelse | Analytikere, hedgefonde, analysefirmaer | | Arkivering og compliance | Videofiler til intern review eller dokumentation | Jura, compliance, bureauer |

Det kommercielle potentiale er reelt: Den amerikanske TikTok-annonceomsætning forventes at nå 23,4 mia. 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 disse data direkte økonomisk værdi.

Hvorfor din grundlæggende Python-kode fejler på TikTok

Hvis du allerede har prøvet noget i denne stil og ikke kom nogen vegne, er du langt fra den eneste:

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 intet brugbart i HTML'en

Årsagen er enkel: TikTok er en af de sværeste platforme at scrape. En almindelig requests.get() returnerer mest et tomt HTML-skelet, fordi det faktiske indhold renderes af JavaScript i browseren. Oven i det bruger TikTok et aggressivt anti-bot-setup, som blandt andet omfatter adfærdsdetektion, TLS-fingerprinting, en , der genererer request-signaturer, og dynamiske CSS-selectors, som kan ændre sig uden varsel.

tiktok-anti-bot-wall.webp

Ifølge Imperva 2025 Bad Bot Report overhalede automatiseret trafik for første gang menneskelig trafik i 2024 — bots står nu for . TikTok er meget bevidst om det og har bygget sine forsvar derefter.

Her er en hurtig fejlfindingstabel, så du kan se, hvad der går galt, og hoppe direkte til den rigtige metode:

| Symptom | Sandsynlig årsag | Metode der løser det | |---|---|---| | Tom HTML / ingen data | JS-renderet 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 | | Det virker én gang, men stopper bagefter | Rate limiting / IP-blokering | Proxy-rotation (alle metoder) | | Login-væg vises | Session/cookie-krav | Metode 3 (browser med gemt session) | | Kode genereret af ChatGPT returnerer intet | TikToks struktur har ændret sig siden modellens træningsdata | Alle 3 metoder (opdaterede tilgange) |

Grænsen for rate limiting ligger cirka på 30–60 forespørgsler i minuttet pr. IP, før du begynder at ramme soft blocks eller CAPTCHA’er. Datacenter-IP’er bliver typisk markeret inden for få minutter — residential eller mobile proxies er i praksis et must, hvis du vil arbejde 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 alle tre med kode, der virker:

  1. Udtræk af skjult JSON — Parse __UNIVERSAL_DATA_FOR_REHYDRATION__ script-tagget, der er 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 pagination.
  3. Browser-automatisering med Playwright — Render 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-filer — det gennemgår jeg i en dedikeret sektion efter metodegennemgangen. Til sidst kommer en fuld sammenligningstabel, så du kan vælge med ro i maven.

Metode 1: Scrape TikTok-videoer med 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 alle sider. Den blok indeholder alle de profil- og videodata, som front-end JavaScript normalt ville renderere — hvilket betyder, at du kan hente det med én HTTP-request, helt uden browser.

Det skal du bruge

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

Installer afhængighederne:

1pip install requests beautifulsoup4

Trin for trin: Udtræk TikTok-video-data fra script-tagget

Trin 1: Send en GET-request med realistiske browser-headers.

Det er her, de fleste nybegyndere fejler. Hvis du sender en ren requests.get() uden headers, returnerer TikTok en 403 eller en CAPTCHA-side. Du skal som minimum 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__")

Եթե script_tag er None, har TikTok enten blokeret dig (tjek statuskoden), eller også har de æ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 videometadata.

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"])  # Visninger
11    print(video["video"]["playAddr"])  # Download-URL til video (uden vandmærke)
12    print(video["video"]["downloadAddr"])  # Download-URL til video (med vandmærke)

Trin 5: Udtræk videoernes download-URL’er.

Feltet playAddr giver typisk en renere version af videoen (ofte uden TikTok-vandmærket), mens downloadAddr indeholder det almindelige vandmærke. Begge er direkte URL’er til .mp4-filen — men de kræver særlige headers for at kunne downloades (det gennemgår vi i download-sektionen nedenfor).

Nu burde du have en liste af videometadata-objekter, der hver især indeholder caption, statistik, 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 indlæsning af siden — typisk de første ~30 videoer på en profil
  • Kan ikke håndtere infinite scroll eller pagination (der findes ingen "næste side" at kalde)
  • Hvis TikTok ændrer script-tag-id’et eller JSON-strukturen, går parseren i stykker (det sker med jævne mellemrum — hjælper med at fange det tidligt)
  • Bedst til: hurtige profilscrapes, engangsudtræk eller når du kun har brug for de nyeste videoer

Metode 2: Scrape TikTok-videoer via det interne API

TikToks front-end indlæser ikke alle videoer på én gang — den laver XHR-kald til interne API-endpoints, mens du scroller. Det vigtigste endpoint for brugervideoer er /api/post/item_list/. Du kan kalde det direkte fra Python, hvilket giver dig cursor-baseret pagination 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 efter XHR, og scroll ned. Du vil se kald 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 udtrække det fra JSON’en i Metode 1 under userInfo.user.secUid)
  • cursor — pagination-offset (starter på 0, og hvert svar returnerer 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.

Du kan tage det 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: Paginér 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"Hentede {len(items)} videoer, i alt: {len(all_videos)}, hasMore: {has_more}")
13print(f"Samlet antal scrappede videoer: {len(all_videos)}")

Hver iteration returnerer 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 de nødvendige parametre ofte — det her er metoden med størst vedligeholdelse. I de seneste måneder er nogle kald begyndt at kræve msToken, X-Bogus eller andre signaturparametre, som genereres af TikToks (spoiler: det er ikke trivielt at genskabe i ren Python).
  • Kan kræve session-cookies 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 forældet (den roterer cirka hver 10. sekund i browseren)
  • Bedst til: bulkudtræk, når du har brug for 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 første to metoder rammer en mur — login-krav, CAPTCHA’er eller signaturparametre, du ikke kan genskabe — er Playwright fallback-løsningen. Den åbner en rigtig (headless) browser, navigerer på TikTok som en menneskelig bruger og kan håndtere JavaScript-rendering, infinite scroll og endda autentificerede sessioner.

Sådan sætter du Playwright op til TikTok-scraping

Installer Playwright og browserbinærerne:

1pip install playwright
2playwright install firefox

Jeg anbefaler Firefox frem for Chromium til TikTok-scraping. Community-test 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 modificeret på C++-niveau til anti-detektion). I opnår Camoufox næsten perfekte stealth-scores mod større 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 videogitteret loader.

1        # Vent på at videoelementerne dukker op
2        await page.wait_for_selector('[data-e2e="user-post-item"]', timeout=15000)

Եթե 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: Udtræk data fra den skjulte JSON — også i Playwright.

Den mest stabile metode 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åndtér infinite scroll for flere videoer.

Hvis du har brug for mere end de første ~30 videoer, kan du scrolle ned og opsnappe yderligere 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):  # Justér antal scrolls 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"Samlet antal videoer: {len(all_videos)}")
21        await browser.close()
22        return all_videos
23# Kør den
24videos = asyncio.run(scrape_tiktok_profile("charlidamelio"))

Nu burde du have en liste af videoobjekter fra både den første indlæsning og eventuelle ekstra sider, der blev hentet via scroll.

Begrænsninger ved Playwright-metoden

  • Langsomste metode klart og tydeligt (fuld rendering, netværkskald, scroll-pauser)
  • Højere ressourceforbrug — hver browserinstans bruger betydelig hukommelse og CPU
  • Stadig udsat for IP-baseret blokering i stor skala — kombiner med proxy-rotation
  • Bedst til: komplekse interaktioner, indhold bag login-væg, CAPTCHA-håndtering eller når Metode 1 og 2 bliver blokeret

Sådan downloader du TikTok-videoer (.mp4) med Python

Det her er afsnittet, der udfylder det største hul i næsten alle andre TikTok-scraping-guides. At hente metadata er nyttigt, men de fleste, der søger på "scrape TikTok videos", vil have selve videofilerne.

TikTok gemmer download-URL’er i videoobjektet:

  • playAddr — typisk versionen uden vandmærke eller med et meget svagt vandmærke
  • downloadAddr — den version TikTok selv bruger til download i appen (inkluderer TikTok-vandmærket)

Begge URL’er er tidsfølsomme og udløber efter et kort tidsrum (typisk et par timer), så du skal downloade hurtigt efter udtrækket.

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 vandmærke
2# eller
3video_url = video["video"]["downloadAddr"]  # Med vandmærke

Trin 2: Send en GET-request med de rigtige headers.

Det er her, mange går galt. Hvis du bare kører 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 responsens indhold 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}")

Du burde nu have en afspilbar .mp4-fil på din lokale maskine.

Vandmærke vs. download uden vandmærke

TikTok gemmer både en version med og uden vandmærke af hver video. playAddr giver ofte en renere version (den, afspilleren bruger), mens downloadAddr inkluderer TikTok-vandmærket med creatorens brugernavn.

Et hurtigt etisk note her: Vandmærket findes for at kreditere skaberen. Hvis du downloader videoer til forskning, analyse eller intern gennemgang, er det som regel helt fint at bruge playAddr. Hvis du vil distribuere eller genposte indholdet, rejser det både etiske og ophavsretlige spørgsmål at fjerne krediteringen. Mere om det i jura-afsnittet nedenfor.

For en mere robust download-pipeline kan du overveje — dens TikTok-extractor håndterer signaturberegning og URL-opløsning automatisk, så du ikke selv skal styre headers og udløbne tokens.

Side om side: Hvilken Python-metode skal du vælge?

Her er sammenligningstabellen, jeg 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 | Mellem | Mellem | | Hastighed | Hurtig (1 request pr. side) | Hurtig (JSON API) | Langsom (fuld rendering) | | Modstandsdygtighed mod anti-bot | Mellem | Lav (endpoints ændrer sig) | Høj (imiterer rigtig browser) | | Downloader .mp4-videoer? | Ja (udtræk playAddr) | Ja (URL i svaret) | Ja (opsnap netværkstrafik) | | Håndterer infinite scroll | Nej (kun første side) | Ja (cursor-pagination) | Ja (scroll-simulering) | | Proxy nødvendig i stor skala | Ja | Ja | Ja | | Vedligeholdelse | Mellem (JSON-struktur ændrer sig) | Høj (endpoints/signaturer ændrer sig ofte) | Lav-mellem (browseren tilpasser sig) | | Bedst til | Hurtige, engangs profilscrapes | Bulkudtræk, alle videoer | Indhold bag login-væg eller komplekst indhold |

Min anbefaling:

  • Skal du bare have et hurtigt snapshot af én profil? Start med Metode 1. Det tager cirka 30 sekunder at sætte op og giver data på under et sekund pr. side.
  • Skal du have alle videoer fra en profil med pagination? Metode 2 er vejen frem, men vær forberedt på vedligeholdelse, når TikTok ændrer sine API-parametre.
  • Arbejder du med login-vægge, CAPTCHA’er eller har brug for maksimal robusthed? Metode 3 med Playwright. Den er langsommere og tungere, men sværest for TikTok at blokere.

I praksis starter jeg ofte med Metode 1 og går først videre til Metode 2 eller 3, når jeg møder 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 dataene. Hvis du er marketinganalytiker og vil have videometadata fra et par konkurrentprofiler, eller brand manager der overvåger 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:

| Tilgang | Færdighedsniveau | Pris | Vedligeholdelse | Bedst til | |---|---|---|---|---| | Python (DIY) | Mellem+ | Gratis (+ proxy-omkostninger) | Høj (scripts går i stykker) | Fuld kontrol, skræddersyede workflows | | (Chrome-udvidelse) | Begynder | Gratis plan tilgængelig | Ingen (AI læser siden på ny hver gang) | Hurtig udtræk af videodata, eksport til Sheets/Excel | | Apify TikTok Scraper | Begynder | Betalt (pr. kørsel) | Lav (vedligeholdt af Apify) | Automatiske bulk-kørsler på tidsplan | | TikAPI | Udvikler | Betalt abonnement | Mellem | Bygge apps oven på TikTok-data |

Sådan håndterer Thunderbit TikTok-scraping

er den AI-webscraper, vi har bygget hos Thunderbit, og den fungerer anderledes end traditionelle scraping-værktøjer. I stedet for at være afhængig af 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.

Arbejdsflowet er reelt to klik:

  1. Gå til en TikTok-profil i Chrome, klik på Thunderbit-udvidelsen, og vælg "AI Suggest Fields." Thunderbit scanner siden og foreslår en tabelstruktur.
  2. Gennemgå de foreslåede kolonner, tilpas om 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 proxyopsætning. For marketinganalytikeren, der skal bruge videometadata fra et par profiler, går det mærkbart hurtigere end at sætte et Python-miljø op — og det går ikke i stykker, hver gang TikTok opdaterer front-end’en (hvilket, ifølge community-rapporter, sker med få ugers mellemrum).

Thunderbit understøtter også — det kan besøge hver enkelt videoside og berige din tabel med flere detaljer som fulde kommentar-tal, musikinfo eller videolængde.

Du kan prøve det gratis via . Hvis du vil vide mere om, hvordan det fungerer, så tjek vores .

Juridiske og etiske retningslinjer for scraping af TikTok

Ingen af de topplacerede tutorials om emnet taler om lovlighed, hvilket er en markant udeladelse, især fordi TikTok aktivt har ført retssager mod scraping-tjenester. Her er det, du bør vide.

TikToks Terms of Service (§ 4.1) forbyder eksplicit automatiseret adgang. At bryde en TOS er et kontraktbrud, ikke en kriminel handling — men det kan føre til kontoblokering, IP-blokering eller civilretlige sager.

Det juridiske landskab er mere tilladt, end mange tror, når det gælder offentlige data. Det vigtigste præjudikat 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 fra Ninth Circuit (bekræ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 injunction, hvilket viser, at TOS-håndhævelse stadig kan bide.

GDPR og CCPA gælder, hvis du indsamler persondata fra EU- eller Californien-brugere. At scrape offentlige opslag er én ting; at opbygge databaser med enkeltpersoners personlige oplysninger er noget andet.

Praktiske retningslinjer:

  • Begræns din request-rate (lad være med at hamre TikToks servere)
  • Scrape ikke private konti eller indhold fra mindreårige
  • Redistribuér ikke ophavsretligt beskyttet videoinhold kommercielt
  • Respektér robots.txt (TikTok blokerer det meste automatiske crawling)
  • At downloade videoer til personlig research eller analyse er noget andet end at genposte dem — forstå forskellen

Ansvarsfraskrivelse: Dette er undervisningsindhold, ikke juridisk rådgivning. Hvis du bygger et kommercielt produkt på scrappede TikTok-data, så tal med en advokat.

Afrunding: De vigtigste pointer

TikTok-scraping i 2025 er et bevægeligt mål. Platformens anti-bot-setup er blandt de mest avancerede på nettet, og naive tilgange (almindelig requests, snippets genereret af ChatGPT, forældede tutorials) fejler. Men med den rigtige metode er det absolut muligt.

Det vigtigste at tage med sig:

  • Metode 1 (skjult JSON) er den hurtigste og enkleste — start her for hurtige profilscrapes.
  • Metode 2 (internt API) giver pagination og bulkadgang, men kræver mest vedligeholdelse, fordi endpoints og signaturkrav ændrer sig.
  • Metode 3 (Playwright) er den mest robuste over for anti-bot-foranstaltninger, men du betaler med hastighed og ressourceforbrug.
  • Alle tre metoder kan udtrække video-download-URL’er — og denne guide er den eneste, der også viser, hvordan du faktisk downloader .mp4-filerne med korrekte 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 ønsker.

Hvis du vil i gang uden at sætte Python op, så — den gratis plan er nok til at teste det på et par profiler og se, om det passer til 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? Se vores guides om , og .

Ofte stillede spørgsmål

Er det lovligt at scrape TikTok-videoer med Python?

At scrape offentligt tilgængelige data befinder sig i en juridisk gråzone, ikke en entydig overtrædelse. Afgørelsen i Meta v. Bright Data (2024) understøtter synspunktet om, at logged-out scraping af offentlige data ikke overtræder platformens Terms of Service. TikToks TOS forbyder dog eksplicit automatiseret adgang, og GDPR/CCPA-forpligtelser gælder for persondata. Det er ikke ulovligt på den måde, mange frygter, men det er heller ikke risikofrit. Tal med en juridisk ekspert om dit konkrete use case.

Hvad er det bedste Python-bibliotek til TikTok-scraping?

Det afhænger af din tilgang. Til udtræk af skjult JSON (Metode 1) er requests + beautifulsoup4 nok. Til kald mod det interne API (Metode 2) fungerer requests eller httpx. Til browserautomatisering (Metode 3) er playwright den aktuelle standard — det har overhalet Selenium i nye scraping-projekter, med sammenlignet med Seleniums ~53 millioner. TikTok-Api-wrapperen (~6,3K GitHub-stars) er også værd at overveje, hvis du vil have en højere abstraktionsgrad, men den kan være skrøbelig.

Kan jeg downloade TikTok-videoer uden vandmærke med Python?

Ja. TikToks egne data indeholder en playAddr-URL, som typisk giver en version af videoen uden det almindelige vandmærke. Denne guide viser, hvordan du udtrækker den URL fra en af de tre metoder og downloader .mp4-filen med de rigtige headers. Feltet downloadAddr indeholder derimod vandmærket.

Hvorfor returnerer min TikTok-scraper tomme data?

Den mest almindelige årsag er, at TikTok kræver JavaScript for at renderere indholdet. En simpel requests.get() henter kun HTML-skelettet — de faktiske data ligger enten i et skjult JSON-script-tag (Metode 1) eller indlæses 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 primære å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), rotér residential- eller mobile proxies (datacenter-IP’er bliver markeret inden for få minutter), indsæt tilfældige pauser mellem requests (minimum 1–3 sekunder), og undgå at scrape i ekstremt højt volumen. Metode 3 (Playwright) giver den højeste modstandsdygtighed mod blokering, fordi den ligner en rigtig browsersession. Hvis du vil i seriøs volumen, så budgettér med proxy-omkostninger — entry-level residential proxies ligger omkring hos de store udbydere.

Prøv Thunderbit til TikTok-scraping
Shuai Guan
Shuai Guan
Co-founder/CEO @ Thunderbit. Passionate about cross section of AI and Automation. He's a big advocate of automation and loves making it more accessible to everyone. Beyond tech, he channels his creativity through a passion for photography, capturing stories one picture at a time.
Topics
Scrape TikTok med PythonTikTok-dataudtræk med PythonPython TikTok scraper-scriptSådan scraper du TikTok-videoer med Python
Indholdsfortegnelse

Prøv Thunderbit

Udtræk 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
PRODUCT HUNT#1 Product of the Week