TikTok har nu runt och kreatörer laddar upp uppskattningsvis 23 miljoner videor varje dag. Om du någon gång 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å “skrapa TikTok-videor med Python”, kopierar ett kodavsnitt från en guide (eller ber ChatGPT skriva ett åt dig), 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 rundan 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 fullständig genomgång av hur du laddar ner själva .mp4-filerna (inte bara metadata — vilket är där de flesta 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 tar jag också upp kodfria alternativ som som kan ge dig samma data på ungefär två klick.
Vad betyder egentligen “att skrapa TikTok-videor”?
Innan vi går in i kod är det värt att reda ut vad folk menar när de säger “skrapa TikTok-videor” — eftersom uttrycket kan syfta på två helt olika saker:
- Extrahera videometadata: bildtexter, hashtags, antal likes, kommentarer, delningar, visningar, publiceringsdatum och information om skaparen. Det här är vad de flesta guider fokuserar på.
- Ladda ner själva videofilerna (.mp4): att spara själva videon på din dator. Det här är vad de flesta egentligen vill ha när de skriver “skrapa TikTok-videor” — och det är den delen nästan ingen går igenom.
Den här guiden täcker båda. Varje metod nedan kan både extrahera metadata och ge dig de nedladdnings-URL:er du behöver för att spara .mp4-filerna.
Varför skrapa 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 vanligaste användningsområdena jag ser:
| Användningsområde | Vad du skrapar | Vem det passar för |
|---|---|---|
| Influencer- och marknadsanalys | Engagemangsgrad, följarsiffror, innehållsformat, hashtag-prestanda | Marknadsföringsteam, byråer |
| Innehållsstrategi | Trendande hashtags, virala videoformat, publiceringstakt | Innehållsskapare, sociala medier-ansvariga |
| Varumärkesbevakning | Omnämnanden, kampanjräckvidd, publikens sentiment | Varumärkesansvariga, PR-team |
| Konkurrensbevakning | Konkurrenters videoprestanda, annonsmaterial, TikTok Shop-listningar | E-handels- och produktteam |
| Marknadsresearch | Nya trender, användarbeteende, produktupptäckt | Analytiker, hedgefonder, researchbolag |
| Arkivering och compliance | Videofiler för intern granskning eller dokumentation | Juridik, compliance, byråer |
Insatserna är stora: TikToks annonsintäkter i USA väntas nå 23,4 miljarder dollar 2026, och affiliateverksamhet står för i de största TikTok Shop-kategorierna. Om du jobbar med e-handel eller influencer marketing har den här datan ett tydligt ekonomiskt värde.
Varför ditt grundläggande Python-kodexempel misslyckas på TikTok
Om du redan har testat något i stil med detta utan resultat ä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 skrapa. Ett vanligt requests.get() returnerar i princip ett tomt HTML-skal eftersom själva innehållet renderas av JavaScript i webbläsaren. Utöver det använder TikTok ett aggressivt skydd mot bottar, inklusive beteendedetektion, TLS-fingerprinting, en som skapar request-signaturer och dynamiska CSS-selektorer som ändras utan förvarning.

Enligt Impervas Bad Bot Report 2025 passerade automatiserad trafik för första gången mänsklig trafik 2024 — bottar står nu för . TikTok är väl medvetet om detta och har byggt sina försvar därefter.
Här är en snabb felsökningstabell så att du kan se vad som går fel och hoppa 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-detektion | Metod 1 med korrekta headers |
| Det fungerar en gång, sedan slutar det | Hastighetsbegränsning / IP-blockering | Proxynästantering (alla metoder) |
| Inloggningsvägg visas | Krav på session/cookies | Metod 3 (webbläsare med sparad session) |
| ChatGPT-genererad kod returnerar inget | TikToks struktur har ändrats sedan modellens träningsdata | Alla 3 metoder (uppdaterade angreppssätt) |
Gränsen för hastighetsbegränsning ligger ungefär vid 30–60 förfrågningar per minut och IP innan du börjar få mjuka blockeringar eller CAPTCHA. Datacenter-IP:er flaggas inom minuter — residential- eller mobilproxyer är i praktiken nödvändiga om du kör i större volym.
Översikt: 3 metoder för att skrapa TikTok-videor med Python
Här är planen. Varje metod har olika för- och nackdelar, och jag går igenom alla tre med fungerande kod:
- Extraktion av dold JSON — tolka
__UNIVERSAL_DATA_FOR_REHYDRATION__-script-taggen som är inbäddad i TikTok-sidor. Snabbast, enklast, ingen webbläsare behövs. - TikToks interna API — anropa den odokumenterade slutpunkten
/api/post/item_list/direkt för bulkdata med cursor-baserad paginering. - Webbläsarautomatisering med Playwright — rendera sidor i en headless browser för att hantera oändlig scrollning, 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 särskilt avsnitt efter metodgenomgångarna. En full jämförelsetabell kommer i slutet så att du kan fatta ett välgrundat beslut.
Metod 1: Skrapa TikTok-videor med dold JSON (nybörjarvänligt)
Det här är metoden jag rekommenderar att börja med. TikTok bäddar in ett stort JSON-objekt i en <script>-tagg med id __UNIVERSAL_DATA_FOR_REHYDRATION__ på i princip varje sidladdning. Det här objektet innehåller all profil- och videodata som front-end-JavaScript normalt skulle rendera — vilket betyder att du kan hämta det med ett enda HTTP-anrop, utan webbläsare.
Det du behöver
- Python 3.8+
requests(ellerhttpx)beautifulsoup4(ellerparsel)- 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 faller. Om du skickar en ren requests.get() utan headers svarar TikTok med ett 403-fel eller en CAPTCHA-sida. Du behöver minst en aktuell browser-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: Tolka 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 (kolla statuskoden) eller så har taggens id ändrats (ovanligt men möjligt).
Steg 3: Läs in scriptinnehållet 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"Följare: {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 video (utan vattenstämpel)
12 print(video["video"]["downloadAddr"]) # Nedladdnings-URL för video (med vattenstämpel)
Steg 5: Extrahera URL:er för videonedladdning.
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 vissa headers för att kunna laddas ner (det täcks i nedladdningsavsnittet längre ner).
Nu bör du ha en lista med videometadataobjekt, där varje objekt innehåller bildtext, statistik, skapandetid, hashtags (i challenges[] och textExtra) och direkta video-URL:er.
Begränsningar med metoden för dold JSON
- Fångar bara data från den första sidladdningen — vanligtvis de första cirka 30 videorna på en profil
- Kan inte hantera oändlig scrollning eller paginering (det finns ingen “nästa sida” att anropa)
- Om TikTok ändrar script-taggs-id:t eller JSON-strukturen går parsern sönder (det händer periodiskt — hjälper till att upptäcka det tidigt)
- Bäst för: snabba profilsökningar, engångsuttag av data eller när du bara behöver de senaste videorna
Metod 2: Skrapa TikTok-videor via det interna API:t
TikToks front-end laddar inte alla videor på en gång — den gör XHR-anrop till interna API-slutpunkter när du scrollar. Den viktigaste för användarvideor är /api/post/item_list/. Du kan anropa den här slutpunkten direkt från Python, vilket ger dig cursor-baserad paginering och tillgång till alla videor på en profil (inte bara första sidan).
Så hittar du den interna API-slutpunkten
Öppna Chrome DevTools på en TikTok-profilliknande sida, 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 hämta det från metod 1:s JSON, underuserInfo.user.secUid)cursor— pagineringsposition (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 ta det 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: Loopa igenom 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"Hämtade {len(items)} videor, totalt: {len(all_videos)}, hasMore: {has_more}")
13print(f"Totalt antal skrapade videor: {len(all_videos)}")
Varje iteration returnerar nästa batch och en ny cursor. Loopen fortsätter tills hasMore är False.
Begränsningar med den interna API-metoden
- TikTok ändrar dessa slutpunkter och nödvändiga parametrar ofta — det här är den mest underhållskrävande metoden. På senare tid har vissa anrop börjat kräva
msToken,X-Boguseller andra signaturparametrar som genereras av TikToks (spoiler: att återskapa det i ren Python är långt ifrån trivialt). - Kan kräva sessionscookies eller extra tokens för vissa datatyper
- IP-baserad hastighetsbegränsning gäller fortfarande — proxyrotation rekommenderas
- Om du börjar få tomma
itemList-arrayer är dinmsTokensannolikt gammal (den roterar ungefär var 10:e sekund i webbläsaren) - Bäst för: bulkextraktion 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: Skrapa TikTok-videor med Playwright (webbläsarautomatisering)
När de två första metoderna stöter på hinder — inloggning, CAPTCHA eller signaturparametrar du inte kan återskapa — är Playwright fallback-lösningen. Den startar en riktig (headless) webbläsare, navigerar TikTok som en människa och kan hantera JavaScript-rendering, oändlig scrollning och även autentiserade sessioner.
Så sätter du upp Playwright för TikTok-skrapning
Installera Playwright och dess webbläsarbinaries:
1pip install playwright
2playwright install firefox
Jag rekommenderar Firefox framför Chromium för TikTok-skrapning. Communitytester visar konsekvent med Firefox, och TikToks bottendetektering är särskilt aggressiv mot headless-webbläsare baserade på Chromium.
För extra stealth kan du kombinera Playwright med (en patchad Playwright-fork) eller (Firefox modifierad på C++-nivå för att undvika upptäckt). I uppnår Camoufox nästan perfekta stealth-poäng mot stora tjänster för bottendetektion.
Steg för steg: Skrapa TikTok-profilvideor 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 tills videogalleriät har laddats.
1 # Vänta tills videoobjekt visas
2 await page.wait_for_selector('[data-e2e="user-post-item"]', timeout=15000)
Om TikTok visar en overlay med texten “Something went wrong” kan du behöva klicka på en retry-knapp:
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)
Steg 3: Extrahera data från den dolda JSON:en (även i Playwright).
Det mest tillförlitliga ä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 scrollning för fler videor.
Om du behöver mer än de initiala cirka 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): # Anpassa antalet scrollningar efter 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"Totalt antal videor: {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 från både den första sidladdningen och eventuella ytterligare sidor som laddades via scrollning.
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 i större 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 avsnittet som fyller den största luckan i nästan alla andra TikTok-guider. Att extrahera metadata är användbart, men de flesta som söker på “skrapa TikTok-videor” vill ha själva videofilerna.
TikTok bäddar in nedladdnings-URL:er i videoobjektet:
playAddr— brukar vara versionen utan vattenstämpel eller med lägre vattenstämpeldownloadAddr— versionen TikTok avser för nedladdning i appen (innehåller 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 snabbt efter att du har extraherat dem.
Steg för steg: Ladda ner en TikTok-video
Steg 1: Extrahera video-URL:en från någon av de tre 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 browser-lik 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 svarsinnehå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"Nedladdad: {filename}")
Nu bör du ha en spelbar .mp4-fil på din lokala dator.
Vattenstämpel vs. version utan vattenstämpel
TikTok lagrar både vattenstämplade och icke-vattenstämplade versioner av varje video. playAddr-URL:en ger ofta en renare version (den som spelaren använder), medan downloadAddr inkluderar TikToks vattenstämpel med kreatörens användarnamn.
En snabb etisk notis: vattenstämpeln finns för att ge skaparen erkännande. Om du laddar ner videor för forskning, analys eller intern granskning är playAddr i regel okej. Om du återpublicerar eller delar innehållet vidare väcker borttagning av skaparattribution både etiska och upphovsrättsliga frågor. Mer om det i den juridiska delen nedan.
För en mer robust nedladdningspipeline kan du överväga — dess TikTok-extraktor hanterar signaturberäkning och URL-upplösning automatiskt, så du slipper hantera headers och tokenutgång själv.
Jämförelse sida vid sida: Vilken Python-metod ska du välja?
Här är den jämförelsetabell jag önskar att jag hade när jag började arbeta med TikTok-skrapning:
| Kriterium | Metod 1: Dold JSON | Metod 2: Intern API | Metod 3: Playwright |
|---|---|---|---|
| Svårighetsgrad | Nybörjare | Medelnivå | Medelnivå |
| Hastighet | Snabb (1 anrop per sida) | Snabb (JSON-API) | Långsam (full sidrendering) |
| Motståndskraft mot botdetektion | Medel | Låg (slutpunkter ändras) | Hög (imiterar riktig webbläsare) |
| Laddar ner video .mp4? | Ja (extrahera playAddr) | Ja (URL i svaret) | Ja (avlyssna nätverkstrafik) |
| Klarar oändlig scrollning | Nej (bara första sidan) | Ja (cursor-paginering) | Ja (simulerad scrollning) |
| Kräver proxy i större skala | Ja | Ja | Ja |
| Underhållsbehov | Medel (JSON-strukturen ändras) | Högt (slutpunkter/signaturer ändras ofta) | Låg-medel (webbläsaren anpassar sig) |
| Bäst för | Snabba engångsuttag från profiler | Bulkextraktion, alla videor | Innehåll bakom inloggning eller komplexa sidor |
Min rekommendation:
- Behöver du bara en snabb ögonblicksbild av en profil? Börja med metod 1. Den tar ungefär 30 sekunder att ställa in och returnerar 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.
- Har du inloggningsväggar, CAPTCHA eller behöver maximal tålighet? 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? Skrapa TikTok-videor med kodfria verktyg
Många som söker på “skrapa TikTok-videor med Python” behöver egentligen inte Python. De behöver datan. Om du är marknadsanalytiker som vill ha videometadata från några konkurrentprofiler, eller en varumärkesansvarig som följer omnämnanden, är det överdrivet att sätta upp en Python-miljö med proxyrotation och signaturhantering.

Här är en ärlig jämförelse av olika arbetssätt:
| Metod | Kunskapsnivå | Kostnad | Underhåll | Bäst för |
|---|---|---|---|---|
| Python (egen lösning) | Medel+ | Gratis (+ proxykostnader) | Högt (skript går sönder) | Full kontroll, anpassade flöden |
| Thunderbit (Chrome-tillägg) | Nybörjare | Gratis nivå finns | Inget (AI läser sidan på nytt varje gång) | Snabb extraktion av videodata, export till Sheets/Excel |
| Apify TikTok Scraper | Nybörjare | Betalt (per körning) | Lågt (underhålls av Apify) | Masskörningar enligt schema |
| TikAPI | Utvecklare | Betald prenumeration | Medel | Bygga appar ovanpå TikTok-data |
Så hanterar Thunderbit TikTok-skrapning
är AI-webbscrapern vi byggt på Thunderbit, och den fungerar annorlunda än traditionella skrapverktyg. I stället för att lita på förbyggda CSS-selektorer eller XPath-regler (som går sönder varje gång TikTok ändrar sitt gränssnitt) läser Thunderbits AI sidstrukturen på nytt varje gång och föreslår relevanta kolumner — bildtext, likes, hashtags, video-URL, skapare med mera.
Arbetsflödet är verkligen två klick:
- Gå till 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.
- Granska de föreslagna kolumnerna, justera vid behov 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 ett fåtal profiler går det här mätbart 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öder också — den kan besöka varje enskild videosida för att berika din tabell med fler detaljer som fullständigt 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-skrapning
Noll av de topprankade guiderna om detta ämne tar upp legalitet, vilket är en tydlig utelämning med tanke på att TikTok aktivt har drivit rättsprocesser mot skrapningstjä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 kontoförbud, IP-blockering eller civilrättsliga åtgärder.
Det juridiska läget är mer tillåtande än många tror för offentliga data. Det ledande prejudikatet är Meta Platforms v. Bright Data (N.D. Cal., jan 2024), där domstolen slog fast att skrapning av offentligt tillgänglig data medan man är utloggad inte bryter mot Metas användarvillkor. Meta drog tillbaka målet och avstod från överklagan. Det tidigare hiQ v. LinkedIn-avgörandet i Ninth Circuit (bekräftat efter Van Buren) slog fast att skrapning av offentligt tillgänglig data inte utgör en CFAA-överträdelse — även om hiQ till slut gjorde upp, betalade 500 000 dollar och gick med på ett permanent föreläggande, vilket visar att TOS-efterlevnad fortfarande kan få konsekvenser.
GDPR och CCPA gäller om du samlar in personuppgifter från användare i EU eller Kalifornien. Att skrapa offentliga inlägg är en sak; att bygga databaser med enskilda användares personliga information är något helt annat.
Praktiska riktlinjer:
- Begränsa takten på dina förfrågningar (överbelasta inte TikToks servrar)
- Skrapa inte privata konton eller innehåll från minderåriga
- Återpublicera inte upphovsrättsskyddat videoinnehåll kommersiellt
- Respektera
robots.txt(TikTok förbjuder det mesta automatiserade crawlandet) - Att ladda ner videor för egen forskning eller analys är inte samma sak som att återpublicera dem — förstå skillnaden
Ansvarsfriskrivning: Det här är utbildningsinnehåll, inte juridisk rådgivning. Om du bygger en kommersiell produkt på skrapad TikTok-data bör du tala med en jurist.
Sammanfattning: Viktiga slutsatser
TikTok-skrapning 2025 är ett rörligt mål. Plattformens anti-bot-system är bland de mest avancerade på webben, och naiva metoder (vanlig requests, ChatGPT-genererade kodsnuttar, gamla guider) kommer att misslyckas. Men med rätt metod är det fullt möjligt.
Det här är det viktigaste att ta med sig:
- Metod 1 (dold JSON) är snabbast och enklast — börja här för snabba profilsökningar.
- Metod 2 (intern API) ger dig paginering och bulkåtkomst, men kräver mest underhåll eftersom slutpunkter och signaturkrav ändras ofta.
- Metod 3 (Playwright) är mest motståndskraftig mot anti-bot-mekanismer, men kostar mer i hastighet och resurser.
- 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 skriva eller underhålla kod. Dess AI-baserade metod gör att den inte går sönder när TikTok ändrar sitt gränssnitt — vilket, enligt communityrapporter, händer oftare än någon skulle önska.
Om du vill komma igång utan någon Python-installation kan du — 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 tekniker för webbscraping? Kolla in våra guider om , och .
Vanliga frågor
Är det lagligt att skrapa TikTok-videor med Python?
Att skrapa offentligt tillgänglig data är ett juridiskt gränsland, inte ett tydligt brott. Avgörandet i Meta v. Bright Data (2024) stödjer uppfattningen att utloggad skrapning av offentlig data inte bryter mot plattformars användarvillkor. TikToks egna villkor förbjuder dock 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 användningsområde.
Vilket är det bästa Python-biblioteket för TikTok-skrapning?
Det beror på din metod. För extraktion av dold JSON (metod 1) räcker requests + beautifulsoup4. För interna API-anrop (metod 2) fungerar requests eller httpx. För webbläsarautomatisering (metod 3) är playwright dagens standard — det har passerat Selenium i användning för nya skrapprojekt, med jämfört med Seleniums cirka 53 miljoner. Wrappret TikTok-Api (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 egna 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. En enkel requests.get() hämtar bara HTML-skalet — själva datan finns 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 misslyckas, 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 skrapar TikTok?
Använd realistiska webbläsarheaders (inklusive User-Agent, Referer och Accept-Language), rotera residential- eller mobilproxyer (datacenter-IP:er flaggas inom minuter), lägg in slumpmässiga pauser mellan förfrågningar (minst 1–3 sekunder) och undvik att skrapa i extremt höga volymer. Metod 3 (Playwright) ger bäst motståndskraft mot blockering eftersom den efterliknar en riktig webbläsarsession. Vid seriös volym bör du budgetera för proxykostnader — instegs-nivå för residential proxyer ligger runt hos större leverantörer.
- Läs mer