Lär dig hur du scrapar TikTok-videor med Python

Senast uppdaterad April 14, 2026

TikTok har i dag omkring och skapare laddar upp uppskattningsvis 23 miljoner videor varje dag. Om du någonsin har försökt samla in data ens från en liten del av det flödet vet du redan hur frustrerande det kan vara.

Det brukar gå till så här: du söker på "scrape TikTok videos with Python", kopierar ett kodexempel från en guide (eller ber ChatGPT skriva ett), kör det – och får… ingenting. Tom HTML. Ett 403-fel. Eller det fruktade "Process finished with exit code 0" utan någon som helst output. Jag har sett exakt den här cirkeln upprepas i mängder av GitHub-ärenden och Reddit-trådar, och det är därför jag satte ihop den här guiden. Vi går igenom tre Python-metoder som faktiskt fungerar 2025, en komplett genomgång för att ladda ner de faktiska .mp4-filerna (inte bara metadata – vilket är där nästan alla andra guider slutar), och en jämförelsetabell så att du kan välja rätt metod för ditt behov. Om du inte behöver Python alls går jag också igenom no-code-alternativ som som kan ge dig samma data på ungefär två klick.

Vad betyder egentligen "att scrapea TikTok-videor"?

Innan vi går in på kod är det värt att reda ut vad folk menar när de säger "scrape TikTok-videor" – för uttrycket kan syfta på två väldigt olika saker:

  1. Extrahera video-metadata: Bildtexter, hashtags, antal likes, kommentarer, delningar, visningar, publiceringsdatum och information om skaparen. Det här är vad de flesta guider fokuserar på.
  2. Ladda ner själva videofilerna (.mp4): Att spara själva videon lokalt på din dator. Det här är vad de flesta egentligen vill göra när de skriver "scrape TikTok-videor" – och det är också den del som nästan ingen täcker.

Den här guiden tar upp båda delarna. Varje metod nedan kan extrahera metadata och ge dig nedladdnings-URL:erna du behöver för att spara .mp4-filerna.

Varför scrapea TikTok-videor med Python?

Med och TikTok Shop som genererar finns det starka affärsskäl att använda TikTok-data. Här är de användningsområden jag ser oftast:

| Användningsområde | Vad du scrapar | Vem det passar för | |---|---|---| | Influencer- och marknadsundersökning | Engagemangsgrad, följarsiffror, innehållsformat, hashtag-prestanda | Marknadsteam, byråer | | Innehållsstrategi | Trendande hashtags, virala videoformat, publiceringstakt | Content creators, social media managers | | Varumärkesbevakning | Omnämnanden, kampanjräckvidd, publikens sentiment | Varumärkesansvariga, PR-team | | Konkurrentanalys | Konkurrenters videoprestanda, annonsmaterial, TikTok Shop-listningar | E-handel, produktteam | | Marknadsresearch | Framväxande trender, användarbeteende, produktupptäckt | Analytiker, hedgefonder, researchbolag | | Arkivering och efterlevnad | Videofiler för intern granskning eller dokumentation | Juridik, compliance, byråer |

De kommersiella insatserna är verkliga: TikToks annonsintäkter i USA förväntas nå 23,4 miljarder dollar 2026, och affiliate-skapare står för i de största TikTok Shop-kategorierna. Om du arbetar med e-handel eller influencer marketing har den här datan direkt monetärt värde.

Varför din grundläggande Python-kod misslyckas på TikTok

Om du redan har testat något liknande och inte kommit någonstans är du i gott sällskap:

1import requests
2from bs4 import BeautifulSoup
3resp = requests.get("https://www.tiktok.com/@someuser")
4soup = BeautifulSoup(resp.text, "html.parser")
5# ...och sedan finns inget användbart i HTML:en

Orsaken är enkel: TikTok är en av de svåraste plattformarna att scrapea. Ett vanligt requests.get() ger mestadels bara ett tomt HTML-skal eftersom det faktiska innehållet renderas med JavaScript i webbläsaren. Utöver det använder TikTok ett aggressivt anti-bot-system med beteendedetektering, TLS-fingeravtryck, en som genererar request-signaturer, och dynamiska CSS-selektorer som ändras utan förvarning.

tiktok-anti-bot-wall.webp

Enligt Imperva 2025 Bad Bot Report passerade automatiserad trafik mänsklig trafik för första gången 2024 — botar står nu för . TikTok känner väl till detta och har byggt sitt skydd därefter.

Här är en snabb felsökningstabell så att du kan förstå vad som går fel och gå direkt till rätt metod:

| Symptom | Trolig orsak | Metod som löser det | |---|---|---| | Tom HTML / ingen data | JS-renderat innehåll; requests kan inte köra JavaScript | Metod 1 (dold JSON) eller Metod 3 (Playwright) | | 403 / Åtkomst nekad | Saknade eller felaktiga headers; anti-bot-detektering | Metod 1 med rätt headers | | Det fungerar en gång, sedan slutar det | Rate limiting / IP-blockering | Proxyrotation (alla metoder) | | Inloggningsvägg visas | Krav på session/cookie | Metod 3 (webbläsare med sparad session) | | ChatGPT-genererad kod ger ingenting | TikToks struktur har ändrats sedan modellens träningsdata | Alla tre metoderna (uppdaterade angreppssätt) |

Gränsen för rate limiting ligger ungefär på 30–60 förfrågningar per minut och IP innan du börjar få mjuka blockeringar eller CAPTCHA. Datacenter-IP:er flaggas ofta inom minuter — residential- eller mobilproxyer är i praktiken ett måste om du vill skrapa i volym.

Översikt: 3 sätt att scrapea TikTok-videor med Python

Här är upplägget. Varje metod har olika styrkor och svagheter, och jag går igenom alla tre med fungerande kod:

  1. Extrahera dold JSON — Läs det __UNIVERSAL_DATA_FOR_REHYDRATION__-script som är inbäddat i TikTok-sidor. Snabbast, enklast, ingen webbläsare behövs.
  2. TikToks interna API — Anropa den odokumenterade endpointen /api/post/item_list/ direkt för mängder av data med cursor-baserad paginering.
  3. Webbläsarautomation med Playwright — Rendera sidor i en headless webbläsare för att hantera oändlig scroll, dynamiskt innehåll och inloggningsväggar.

Alla tre metoder kan också användas för att ladda ner de faktiska .mp4-videofilerna — det går jag igenom i ett eget avsnitt efter metodgenomgångarna. En full jämförelsetabell kommer i slutet så att du kan fatta ett välgrundat beslut.

Metod 1: Scrapea TikTok-videor med dold JSON (nybörjarvänligt)

Det här är metoden jag rekommenderar att börja med. TikTok bäddar in en stor JSON-blobb i ett <script>-tagg med id:t __UNIVERSAL_DATA_FOR_REHYDRATION__ på i princip varje sidladdning. Den här blobben innehåller all profil- och videodata som front-end-JavaScript annars skulle rendera — vilket betyder att du kan hämta den med en enda HTTP-förfrågan, utan webbläsare.

Det du behöver

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

Installera beroenden:

1pip install requests beautifulsoup4

Steg för steg: Extrahera TikTok-videodata från script-taggen

Steg 1: Skicka en GET-förfrågan med realistiska webbläsarheaders.

Det är här de flesta nybörjare misslyckas. Om du skickar ett rent requests.get() utan headers returnerar TikTok ofta en 403 eller en CAPTCHA-sida. Du behöver minst en aktuell webbläsar-User-Agent och 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)

Steg 2: Analysera HTML:en och hitta hydration-script-taggen.

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

Om script_tag är None har TikTok antingen blockerat dig (kontrollera statuskoden) eller ändrat tagg-id:t (ovanligt, men möjligt).

Steg 3: Läs in scriptets innehåll som JSON.

1data = json.loads(script_tag.string)

Steg 4: Navigera i JSON-strukturen för att extrahera videometadata.

Strukturen ligger under __DEFAULT_SCOPE__. För en profilsida:

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# Videolista (första sidan med videor)
7item_list = user_detail.get("itemList", [])
8for video in item_list:
9    print(video["desc"])  # Bildtext
10    print(video["stats"]["playCount"])  # Visningar
11    print(video["video"]["playAddr"])  # Nedladdnings-URL för videon (utan vattenstämpel)
12    print(video["video"]["downloadAddr"])  # Nedladdnings-URL för videon (med vattenstämpel)

Steg 5: Extrahera nedladdnings-URL:er för videor.

Fältet playAddr ger vanligtvis en renare version av videon (ofta utan TikToks vattenstämpel), medan downloadAddr innehåller den vanliga vattenstämpeln. Båda är direkta URL:er till .mp4-filen — men de kräver specifika headers för att kunna laddas ner (detta täcks i nedladdningsdelen nedan).

Nu bör du ha en lista med videometadataobjekt, där varje objekt innehåller bildtext, statistik, skapandetid, hashtags (i challenges[] och textExtra) samt direkta video-URL:er.

Begränsningar med metoden för dold JSON

  • Fångar bara data från den initiala sidladdningen — vanligtvis de första ~30 videorna på en profil
  • Kan inte hantera oändlig scroll eller paginering (det finns ingen "nästa sida" att begära)
  • Om TikTok ändrar script-taggens id eller JSON-strukturen går parsern sönder (det här händer periodvis — hjälper till att upptäcka det tidigt)
  • Bäst för: snabba profilscrapes, engångsuttag eller när du bara behöver de senaste videorna

Metod 2: Scrapea TikTok-videor via det interna API:et

TikToks front-end laddar inte alla videor på en gång — den gör XHR-anrop till interna API-endpoints när du scrollar. Den viktigaste för användarvideor är /api/post/item_list/. Du kan anropa den här endpointen direkt från Python, vilket ger dig cursor-baserad paginering och åtkomst till alla videor på en profil (inte bara första sidan).

Så hittar du den interna API-endpointen

Öppna Chrome DevTools på en TikTok-profilesida, gå till Network-fliken, filtrera på XHR och scrolla ned. Du kommer att se anrop till URL:er som:

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

De viktigaste parametrarna är:

  • secUid — profilens unika ID (du kan extrahera detta från metod 1:s JSON, under userInfo.user.secUid)
  • cursor — pagineringsoffset (börjar på 0, varje svar returnerar nästa cursor-värde)
  • count — antal objekt per sida (vanligtvis 30–35)

Steg för steg: Fråga TikToks interna API med Python

Steg 1: Hämta secUid för målprofilen.

Du kan hämta detta från den dolda JSON:en (Metod 1) eller från profilsidans HTML.

Steg 2: Bygg och skicka API-förfrågan.

1import requests
2import json
3sec_uid = "MS4wLjABAAAA..."  # Från metod 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()

Steg 3: Tolka svaret.

Varje objekt i data["itemList"] innehåller samma videostruktur som i Metod 1 — desc, stats, video.playAddr, video.downloadAddr och så vidare.

Steg 4: Paginera genom alla videor.

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

Varje iteration returnerar nästa batch och en ny cursor. Loopen fortsätter tills hasMore är False.

Begränsningar med metoden för interna API:er

  • TikTok ändrar dessa endpoints och parametrar ofta — detta är metoden med högst underhållsbehov. Under de senaste månaderna har vissa förfrågningar börjat kräva msToken, X-Bogus eller andra signaturparametrar som genereras av TikToks (spoiler: att återskapa det i ren Python är inte trivialt).
  • Kan kräva sessionscookies eller ytterligare tokens för vissa datatyper
  • IP-baserad rate limiting gäller fortfarande — proxyrotation rekommenderas
  • Om du börjar få tomma itemList-arrayer är din msToken troligen för gammal (den roterar ungefär var 10:e sekund i webbläsaren)
  • Bäst för: massuttag av data när du behöver alla videor från en profil och metod 1:s begränsning till första sidan inte räcker

Metod 3: Scrapea TikTok-videor med Playwright (webbläsarautomation)

När de två första metoderna stöter på hinder — inloggningskrav, CAPTCHA eller signaturparametrar du inte kan återskapa — är Playwright nästa steg. Det startar en riktig (headless) webbläsare, navigerar TikTok som en mänsklig användare och kan hantera JavaScript-rendering, oändlig scroll och till och med autentiserade sessioner.

Så sätter du upp Playwright för TikTok-scraping

Installera Playwright och dess webbläsarbinarier:

1pip install playwright
2playwright install firefox

Jag rekommenderar Firefox framför Chromium för TikTok-scraping. Community-testning visar konsekvent med Firefox, och TikToks botdetektering är särskilt aggressiv mot headless-webbläsare baserade på Chromium.

För extra stealth kan du kombinera Playwright med (en modifierad Playwright-fork) eller (Firefox modifierad på C++-nivå för att undvika detektion). I får Camoufox nästan perfekta stealth-poäng mot stora botdetekteringstjänster.

Steg för steg: Scrapea TikTok-profiler med Playwright

Steg 1: Starta en headless Firefox-webbläsare och gå till 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")

Steg 2: Vänta på att videogalleri ska laddas.

1        # Vänta tills videoobjekt visas
2        await page.wait_for_selector('[data-e2e="user-post-item"]', timeout=15000)

Om TikTok visar ett "Something went wrong"-lager kan du behöva klicka på en retry-knapp:

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)

Steg 3: Extrahera data från den dolda JSON:en (även i Playwright).

Det mest tillförlitliga sättet är fortfarande att hämta hydration-JSON:en, även när du använder en webbläsare:

1        script_el = page.locator("#__UNIVERSAL_DATA_FOR_REHYDRATION__")
2        raw_json = await script_el.inner_text()
3        data = json.loads(raw_json)
4        # Samma JSON-navigering som i Metod 1
5        user_detail = data["__DEFAULT_SCOPE__"]["webapp.user-detail"]
6        videos = user_detail.get("itemList", [])

Steg 4: Hantera oändlig scroll för fler videor.

Om du behöver fler än de första ~30 videorna kan du scrolla ned och fånga fler XHR-svar:

1        all_videos = list(videos)
2        # Fånga API-svar medan vi scrollar
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        # Scrolla ned för att trigga fler laddningar
13        for _ in range(5):  # Justera scroll-antalet vid behov
14            await page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
15            await asyncio.sleep(2)
16        # Samla videor från avlyssnade 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 den
24videos = asyncio.run(scrape_tiktok_profile("charlidamelio"))

Nu bör du ha en lista med videoobjekt både från den första sidladdningen och från ytterligare sidor som laddats via scroll.

Begränsningar med Playwright-metoden

  • Långsammast av alla metoder (full sidrendering, nätverksrundor, scrollfördröjningar)
  • Högre resursförbrukning — varje webbläsarinstans använder mycket minne och CPU
  • Fortfarande utsatt för IP-baserad blockering vid skala — kombinera med proxyrotation
  • Bäst för: komplexa interaktioner, innehåll bakom inloggningsvägg, hantering av CAPTCHA eller när Metod 1 och 2 blockeras

Så laddar du ner TikTok-videor (.mp4) med Python

Det här är delen som fyller det största hålet i nästan alla andra TikTok-scrapingguider. Att extrahera metadata är användbart, men de flesta som söker efter "scrape TikTok-videos" vill ha själva videofilerna.

TikTok bäddar in nedladdnings-URL:er i videoobjektet:

  • playAddr — vanligtvis versionen utan vattenstämpel eller med lägre vattenstämpel
  • downloadAddr — versionen TikTok avser för nedladdning i appen (inkluderar TikToks vattenstämpel)

Båda URL:erna är tidskänsliga och upphör att gälla efter en kort stund (vanligtvis några timmar), så du behöver ladda ner dem snart efter att du extraherat dem.

Steg för steg: Ladda ner en TikTok-video

Steg 1: Extrahera video-URL:en med någon av metoderna ovan.

1video_url = video["video"]["playAddr"]  # Version utan vattenstämpel
2# eller
3video_url = video["video"]["downloadAddr"]  # Med vattenstämpel

Steg 2: Skicka en GET-förfrågan med rätt headers.

Det här är steget som ofta ställer till det. Om du bara kör requests.get(video_url) får du ett 403-fel. TikTok kontrollerar Referer-headern och förväntar sig en webbläsarliknande 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)

Steg 3: Skriv innehållet till en .mp4-fil.

Använd stream=True och skriv i chunkar — TikTok-videor kan vara stora, och du vill inte ladda hela filen i minnet:

1video_id = video["id"]
2filename = f"tiktok_{video_id}.mp4"
3with open(filename, "wb") as f:
4    for chunk in resp.iter_content(chunk_size=1024 * 1024):  # 1 MB-chunkar
5        if chunk:
6            f.write(chunk)
7print(f"Downloaded: {filename}")

Nu bör du ha en spelbar .mp4-fil på din dator.

Vattenstämpel vs. nedladdning utan vattenstämpel

TikTok lagrar både vattenstämplade och vattenstämpelfria versioner av varje video. playAddr-URL:en ger ofta en renare version (den som spelaren använder), medan downloadAddr innehåller TikToks vattenstämpel med skaparnamnet.

En viktig etisk notis här: vattenstämpeln finns där för att ge skaparen kredit. Om du laddar ner videor för forskning, analys eller intern granskning är det i regel okej att använda playAddr. Om du däremot ska distribuera eller återpublicera innehållet väcker borttagning av attribution både etiska och upphovsrättsliga frågor. Mer om detta i avsnittet om juridik nedan.

För en mer robust nedladdningspipeline kan du överväga — dess TikTok-extraktor hanterar signaturberäkningar och URL-upplösning automatiskt, så du slipper själv hantera headers och att tokens går ut.

Jämförelse sida vid sida: Vilken Python-metod ska du använda?

Här är jämförelsetabellen jag själv önskade att jag hade när jag började med TikTok-scraping:

| Kriterium | Metod 1: Dold JSON | Metod 2: Internt API | Metod 3: Playwright | |---|---|---|---| | Svårighetsgrad | Nybörjare | Medelnivå | Medelnivå | | Hastighet | Snabb (1 förfrågan per sida) | Snabb (JSON-API) | Långsam (full sidrendering) | | Motståndskraft mot anti-bot | Medel | Låg (endpoints ändras) | Hög (imiterar riktig webbläsare) | | Laddar ner video .mp4? | Ja (extraherar playAddr) | Ja (URL i svaret) | Ja (avlyssnar nätverk) | | Hanterar oändlig scroll | Nej (bara första sidan) | Ja (cursor-paginering) | Ja (scrollsimulering) | | Kräver proxy i skala | Ja | Ja | Ja | | Underhållsbehov | Medel (JSON-strukturen ändras) | Högt (endpoints/signaturer ändras ofta) | Lågt–medel (webbläsaren anpassar sig) | | Bäst för | Snabba engångsscrapes av profiler | Massuttag av data, alla videor | Innehåll bakom inloggningsvägg eller komplexa sidor |

Min rekommendation:

  • Behöver du bara en snabb översikt av en profil? Börja med Metod 1. Den tar ungefär 30 sekunder att sätta upp och ger data på under en sekund per sida.
  • Behöver du alla videor från en profil med paginering? Metod 2 är rätt väg, men räkna med underhåll när TikTok ändrar sina API-parametrar.
  • Hanterar du inloggningsväggar, CAPTCHA eller behöver maximal robusthet? Metod 3 med Playwright. Den är långsammare och tyngre, men svårast för TikTok att blockera.

I praktiken börjar jag ofta med Metod 1 och går bara vidare till Metod 2 eller 3 när jag stöter på begränsningar. Det håller infrastrukturen enkel och kostnaden låg.

Behöver du inte Python? Scrapea TikTok-videor med no-code-verktyg

Många som söker på "scrape TikTok videos with Python" behöver egentligen inte Python. De behöver datan. Om du är en marknadsanalytiker som vill ha videometadata från några konkurrentprofiler, eller en varumärkesansvarig som bevakar omnämnanden, är det överdrivet att sätta upp en Python-miljö med proxyrotation och signaturhantering.

python-vs-nocode-ai-comparison.webp

Här är en ärlig jämförelse av olika angreppssätt:

| Angreppssätt | Kunskapsnivå | Kostnad | Underhåll | Bäst för | |---|---|---|---|---| | Python (gör det själv) | Medel+ | Gratis (+ proxykostnader) | Högt (skript går sönder) | Full kontroll, anpassade flöden | | (Chrome-tillägg) | Nybörjare | Gratis nivå finns | Inget (AI läser sidan på nytt varje gång) | Snabb extrahering av videodata, export till Sheets/Excel | | Apify TikTok Scraper | Nybörjare | Betald (per körning) | Lågt (underhålls av Apify) | Storskaliga schemalagda körningar | | TikAPI | Utvecklare | Betald prenumeration | Medel | Bygga appar ovanpå TikTok-data |

Så hanterar Thunderbit TikTok-scraping

är AI-webscrapern vi byggt på Thunderbit, och den fungerar annorlunda än traditionella scrapingverktyg. I stället för att förlita sig på förbyggda CSS-selektorer eller XPath-regler (som går sönder varje gång TikTok ändrar sin layout) läser Thunderbits AI sidan på nytt varje gång och föreslår relevanta kolumner — bildtext, likes, hashtags, video-URL, författare med mera.

Arbetsflödet är verkligen två klick:

  1. Öppna en TikTok-profil i Chrome, klicka på Thunderbit-tillägget och välj "AI Suggest Fields". Thunderbit skannar sidan och föreslår en tabellstruktur.
  2. Granska de föreslagna kolumnerna, justera om det behövs och klicka på "Scrape".

Datan exporteras direkt till Google Sheets, Excel, Airtable eller Notion. Inga CSS-selektorer att underhålla, ingen kod att felsöka, ingen proxykonfiguration. För marknadsanalytikern som behöver videometadata från några få profiler går detta märkbart snabbare än att sätta upp en Python-miljö — och det går inte sönder när TikTok uppdaterar sitt gränssnitt (vilket, enligt communityrapporter, sker med några veckors mellanrum).

Thunderbit stödjer också — det kan besöka varje enskild videosida och berika din datatabell med ytterligare detaljer som fullständiga kommentarsantal, musikinfo eller videolängd.

Du kan prova det gratis via . För mer om hur det fungerar, kolla in vår .

Juridiska och etiska riktlinjer för TikTok-scraping

Noll av de topprankade guiderna om det här ämnet tar upp laglighet, vilket är en tydlig brist med tanke på att TikTok aktivt har drivit rättsprocesser mot scraping-tjänster. Här är vad du behöver veta.

TikToks användarvillkor (§ 4.1) förbjuder uttryckligen automatiserad åtkomst. Att bryta mot användarvillkoren är ett avtalsbrott, inte ett brott i straffrättslig mening — men det kan leda till kontoblockeringar, IP-blockeringar eller civilrättsliga åtgärder.

Den juridiska miljön är mer tillåtande än många tror när det gäller offentliga data. Det viktigaste prejudikatet är Meta Platforms v. Bright Data (N.D. Cal., januari 2024), där domstolen slog fast att scraping av offentligt tillgänglig data medan man är utloggad inte bryter mot Metas användarvillkor. Meta drog sedan tillbaka målet och avstod från att överklaga. Det tidigare avgörandet i hiQ v. LinkedIn från Ninth Circuit (bekräftat efter Van Buren) fastslog att scraping av offentligt tillgänglig data inte utgör ett CFAA-brott — även om hiQ till slut förlikades, betalade 500 000 dollar och gick med på ett permanent föreläggande, vilket visar att användarvillkorshävning fortfarande kan få konsekvenser.

GDPR och CCPA gäller om du samlar in personuppgifter från användare i EU eller Kalifornien. Att samla offentliga inlägg är en sak; att bygga databaser över enskilda användares personliga information är något helt annat.

Praktiska riktlinjer:

  • Begränsa takten på dina förfrågningar (belasta inte TikToks servrar)
  • Scrapea inte privata konton eller innehåll som tillhör minderåriga
  • Återpublicera inte upphovsrättsskyddade videor i kommersiellt syfte
  • Respektera robots.txt (TikTok blockerar det mesta automatiserade crawlandet)
  • Att ladda ner videor för personlig research eller analys är inte samma sak som att återpublicera dem — förstå skillnaden

Ansvarsfriskrivning: Detta är utbildningsmaterial, inte juridisk rådgivning. Om du bygger en kommersiell produkt på scrappad TikTok-data bör du rådgöra med en jurist.

Sammanfattning: Det viktigaste att ta med sig

TikTok-scraping 2025 är ett rörligt mål. Plattformens anti-bot-system hör till de mest sofistikerade på webben, och naiva metoder (vanligt requests, ChatGPT-genererade kodsnuttar, föråldrade guider) kommer att misslyckas. Men med rätt metod är det fullt möjligt.

Det här är det viktigaste att komma ihåg:

  • Metod 1 (dold JSON) är snabbast och enklast — börja här för snabba profilscrapes.
  • Metod 2 (internt API) ger dig paginering och bulkåtkomst, men kräver mest underhåll eftersom endpoints och signaturkrav ändras.
  • Metod 3 (Playwright) är mest robust mot anti-bot-mekanismer, men på bekostnad av hastighet och resursanvändning.
  • Alla tre metoderna kan extrahera nedladdnings-URL:er för videor — och den här guiden är den enda som visar hur du faktiskt laddar ner .mp4-filerna med rätt headers.
  • För icke-tekniska användare erbjuder en genuint snabbare väg till samma data utan att du behöver skriva eller underhålla kod. Dess AI-baserade arbetssätt gör att det inte går sönder när TikTok ändrar layout — vilket enligt communityrapporter händer oftare än någon önskar.

Om du vill komma igång utan någon Python-installation, — gratisnivån räcker för att prova på några profiler och se om det passar ditt arbetsflöde. För dig som väljer Python-spåret: börja med Metod 1, validera din data och skala sedan upp därifrån.

Vill du fördjupa dig i web scraping-tekniker? Kolla in våra guider om , och .

Vanliga frågor

Är det lagligt att scrapea TikTok-videor med Python?

Scraping av offentligt tillgänglig data befinner sig i en juridisk gråzon, inte i ett entydigt förbjudet område. Avgörandet i Meta v. Bright Data (2024) stödjer uppfattningen att utloggad scraping av offentlig data inte bryter mot plattformens användarvillkor. Däremot förbjuder TikToks användarvillkor uttryckligen automatiserad åtkomst, och GDPR/CCPA gäller för personuppgifter. Det är inte olagligt på det sätt som många fruktar, men det är inte riskfritt heller. Rådgör med en jurist för ditt specifika fall.

Vilket Python-bibliotek är bäst för TikTok-scraping?

Det beror på angreppssätt. För extrahering av dold JSON (Metod 1) räcker requests + beautifulsoup4. För anrop till interna API:er (Metod 2) fungerar requests eller httpx. För webbläsarautomation (Metod 3) är playwright dagens standard — det har gått om Selenium i popularitet för nya scrapingprojekt, med jämfört med Selenims cirka 53 miljoner. TikTok-Api-wrappret (cirka 6,3K GitHub-stjärnor) är också värt att överväga om du vill ha ett mer hög nivå-gränssnitt, även om det kan vara skört.

Kan jag ladda ner TikTok-videor utan vattenstämpel med Python?

Ja. TikToks egen data innehåller en playAddr-URL som vanligtvis ger en version av videon utan den vanliga vattenstämpeln. Den här guiden visar hur du extraherar den URL:en med någon av de tre metoderna och laddar ner .mp4-filen med rätt headers. Fältet downloadAddr innehåller däremot vattenstämpeln.

Varför returnerar min TikTok-scraper tom data?

Den vanligaste orsaken är att TikTok kräver JavaScript för att rendera innehållet. Ett enkelt requests.get() hämtar bara HTML-skalet — själva datan ligger antingen i en dold JSON-script-tagg (Metod 1) eller laddas dynamiskt via JavaScript (Metod 3). Om du får tom HTML, testa Metod 1 först. Om det inte fungerar, kontrollera dina headers (saknad Referer är den vanligaste orsaken till 403-fel) eller gå vidare till Metod 3 med Playwright.

Hur undviker jag att bli blockerad när jag scrapar TikTok?

Använd realistiska webbläsarheaders (inklusive User-Agent, Referer och Accept-Language), rotera residential- eller mobilproxyer (datacenter-IP:er flaggas ofta inom minuter), lägg in slumpmässiga fördröjningar mellan förfrågningar (minst 1–3 sekunder), och undvik att skrapa i extremt höga volymer. Metod 3 (Playwright) ger högst motståndskraft mot blockering eftersom den efterliknar en riktig webbläsarsession. Vid seriös volym bör du budgetera för proxykostnader — instegs-proxyer för residential trafikerar runt hos större leverantörer.

Testa Thunderbit för 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 pythonTiktok data extraction pythonPython Tiktok scraper scriptHow to scrape Tiktok videos with python
Innehållsförteckning

Testa Thunderbit

Skrapa leads och annan data med bara 2 klick. Drivs av AI.

Hämta Thunderbit Det är gratis
Extrahera data med AI
Överför enkelt data till Google Sheets, Airtable eller Notion
PRODUCT HUNT#1 Product of the Week