TikTok ma dziś około , a twórcy publikują szacunkowo 23 miliony filmów każdego dnia. Jeśli kiedykolwiek próbowałeś zebrać dane choćby z ułamka tego strumienia, dobrze wiesz, jak frustrujące to potrafi być.
Zwykle wygląda to tak: wpisujesz w wyszukiwarkę „scrape TikTok videos with Python”, kopiujesz fragment z poradnika (albo prosisz ChatGPT o wygenerowanie kodu), uruchamiasz go i dostajesz… nic. Pusty HTML. Błąd 403. Albo nieszczęsny komunikat „Process finished with exit code 0” bez żadnego wyniku. Widziałem dokładnie ten scenariusz w dziesiątkach zgłoszeń na GitHubie i wątków na Reddicie — i właśnie dlatego przygotowałem ten poradnik. Pokażę trzy metody w Pythonie, które faktycznie działają w 2025 roku, pełny opis pobierania rzeczywistych plików wideo .mp4 (nie tylko metadanych — bo na tym kończy się większość innych instrukcji) oraz tabelę porównawczą, dzięki której wybierzesz najlepsze podejście do swojego przypadku. Jeśli wcale nie potrzebujesz Pythona, omówię też rozwiązania no-code, takie jak , które pozwolą Ci zdobyć te same dane w dosłownie dwa kliknięcia.
Co właściwie oznacza „scrape’owanie filmów z TikToka”?
Zanim przejdziemy do kodu, warto doprecyzować, co ludzie mają na myśli, mówiąc „scrape TikTok videos” — bo ten zwrot może oznaczać dwie zupełnie różne rzeczy:
- Pobieranie metadanych wideo: opisy, hashtagi, liczba polubień, komentarzy, udostępnień, wyświetleń, data publikacji, informacje o autorze. Na tym skupia się większość poradników.
- Pobieranie samych plików wideo (.mp4): zapisanie filmu na swoim komputerze. To właśnie jest to, czego naprawdę szuka większość osób wpisujących „scrape TikTok videos” — a jednocześnie ten temat prawie nigdzie nie jest omawiany.
Ten poradnik obejmuje oba podejścia. Każda z metod poniżej pozwala pobrać metadane i uzyskać linki potrzebne do zapisania plików .mp4.
Dlaczego warto scrape’ować filmy z TikToka w Pythonie?
Przy i przychodach TikTok Shop z reklam na poziomie , biznesowe powody, by korzystać z danych TikToka, są naprawdę mocne. Najczęstsze zastosowania, które widzę, to:
| Przypadek użycia | Co jest scrapowane | Dla kogo |
|---|---|---|
| Badania influencerów i marketingu | Wskaźniki zaangażowania, liczba obserwujących, formaty treści, skuteczność hashtagów | Zespoły marketingowe, agencje |
| Strategia treści | Trendujące hashtagi, wiralowe formaty wideo, częstotliwość publikacji | Twórcy treści, social media managerowie |
| Monitoring marki | Wzmianki, zasięg kampanii, nastroje odbiorców | Brand managerowie, zespoły PR |
| Analiza konkurencji | Wyniki filmów konkurencji, kreacje reklamowe, oferty TikTok Shop | E-commerce, zespoły produktowe |
| Badania rynku | Nowe trendy, zachowania odbiorców, odkrywanie produktów | Analitycy, fundusze hedgingowe, firmy badawcze |
| Archiwizacja i zgodność | Pliki wideo do wewnętrznego przeglądu lub archiwum | Dział prawny, compliance, agencje |
Stawka biznesowa jest realna: przychody z reklam TikToka w USA mają osiągnąć 23,4 miliarda dolarów w 2026 roku, a twórcy afiliacyjni odpowiadają za w czołowych kategoriach TikTok Shop. Jeśli działasz w e-commerce albo influencer marketingu, te dane mają bezpośrednią wartość finansową.
Dlaczego podstawowy kod w Pythonie nie działa na TikToku
Jeśli próbowałeś już czegoś takiego i nic z tego nie wyszło, nie jesteś sam:
1import requests
2from bs4 import BeautifulSoup
3resp = requests.get("https://www.tiktok.com/@someuser")
4soup = BeautifulSoup(resp.text, "html.parser")
5# ...a w HTML i tak nie ma nic użytecznego
Powód jest prosty: TikTok to jedna z najtrudniejszych platform do scrapowania. Zwykłe requests.get() zwraca głównie pustą powłokę HTML, bo właściwa zawartość jest renderowana przez JavaScript w przeglądarce. Do tego TikTok stosuje bardzo agresywną warstwę anty-botową, obejmującą wykrywanie zachowania, fingerprinting TLS, , która generuje podpisy żądań, oraz dynamiczne selektory CSS zmieniające się bez ostrzeżenia.

Według raportu Imperva 2025 Bad Bot Report, ruch automatyczny po raz pierwszy w 2024 roku przewyższył ruch generowany przez ludzi — boty odpowiadają dziś za . TikTok doskonale to rozumie i odpowiednio wzmocnił swoje zabezpieczenia.
Poniżej znajdziesz krótką tabelę diagnostyczną, która pomoże Ci ustalić, gdzie leży problem i którą metodę wybrać:
| Objaw | Prawdopodobna przyczyna | Metoda, która to naprawia |
|---|---|---|
| Pusty HTML / brak danych | Zawartość renderowana przez JS; requests nie uruchamia JavaScriptu | Metoda 1 (ukryty JSON) lub Metoda 3 (Playwright) |
| 403 / Access Denied | Brakujące lub nieprawidłowe nagłówki; wykrywanie bota | Metoda 1 z poprawnymi nagłówkami |
| Działa raz, potem przestaje | Limitowanie żądań / blokada IP | Rotacja proxy (we wszystkich metodach) |
| Pojawia się login wall | Wymagana sesja / cookies | Metoda 3 (przeglądarka z zapisaną sesją) |
| Kod wygenerowany przez ChatGPT nic nie zwraca | Struktura TikToka zmieniła się od czasu danych treningowych modelu | Wszystkie 3 metody (aktualne podejścia) |
Próg limitowania żądań to mniej więcej 30–60 zapytań na minutę z jednego IP, zanim pojawią się miękkie blokady lub CAPTCHA. Adresy IP z centrów danych są oznaczane w ciągu minut — przy większej skali praktycznie niezbędne są proxy residential lub mobile.
Przegląd: 3 metody scrapowania filmów z TikToka w Pythonie
Oto plan działania. Każda metoda ma inne zalety i wady, a wszystkie trzy omówię z działającym kodem:
- Ekstrakcja ukrytego JSON — parsowanie tagu skryptu
__UNIVERSAL_DATA_FOR_REHYDRATION__osadzonego w stronach TikToka. Najszybsza, najprostsza, bez potrzeby używania przeglądarki. - Wewnętrzne API TikToka — bezpośrednie wywołanie nieudokumentowanego endpointu
/api/post/item_list/dla danych zbiorczych z paginacją opartą na cursorze. - Automatyzacja przeglądarki z Playwright — renderowanie stron w headless browserze, aby obsłużyć nieskończone przewijanie, dynamiczne treści i login wall.
Wszystkie trzy metody można też wykorzystać do pobierania rzeczywistych plików .mp4 — opisuję to w osobnej sekcji po omówieniu metod. Na końcu znajdziesz pełną tabelę porównawczą, która pomoże Ci podjąć świadomą decyzję.
Metoda 1: Scrape’owanie filmów z TikToka z ukrytego JSON (przyjazne dla początkujących)
To podejście, od którego polecam zacząć. TikTok osadza ogromny blok JSON wewnątrz tagu <script> z identyfikatorem __UNIVERSAL_DATA_FOR_REHYDRATION__ praktycznie przy każdym wczytaniu strony. Ten blok zawiera wszystkie dane profilu i filmów, które front-endowy JavaScript zwykle renderuje na ekranie — dzięki czemu możesz pobrać je jednym żądaniem HTTP, bez przeglądarki.
Czego potrzebujesz
- Python 3.8+
requests(lubhttpx)beautifulsoup4(lubparsel)- Poprawne nagłówki:
User-Agent,Referer,Accept-Language
Zainstaluj zależności:
1pip install requests beautifulsoup4
Krok po kroku: wyciąganie danych o filmach TikToka z tagu skryptu
Krok 1: Wyślij żądanie GET z realistycznymi nagłówkami przeglądarki.
To tutaj większość początkujących popełnia błąd. Jeśli wyślesz zwykłe requests.get() bez nagłówków, TikTok zwróci 403 albo stronę CAPTCHA. Minimum to aktualny User-Agent przeglądarki oraz nagłówek Referer.
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)
Krok 2: Sparsuj HTML i znajdź tag skryptu z danymi do hydracji.
1soup = BeautifulSoup(resp.text, "html.parser")
2script_tag = soup.find("script", id="__UNIVERSAL_DATA_FOR_REHYDRATION__")
Jeśli script_tag ma wartość None, TikTok prawdopodobnie zablokował żądanie (sprawdź kod statusu) albo zmienił identyfikator tagu (rzadkie, ale możliwe).
Krok 3: Wczytaj zawartość skryptu jako JSON.
1data = json.loads(script_tag.string)
Krok 4: Przejdź przez strukturę JSON, aby wyciągnąć metadane filmu.
Struktura jest zagnieżdżona pod __DEFAULT_SCOPE__. Dla strony profilu użytkownika:
1user_detail = data["__DEFAULT_SCOPE__"]["webapp.user-detail"]
2user_info = user_detail["userInfo"]
3# Statystyki profilu
4stats = user_info["stats"]
5print(f"Followers: {stats['followerCount']}, Likes: {stats['heartCount']}")
6# Lista filmów (pierwsza strona wyników)
7item_list = user_detail.get("itemList", [])
8for video in item_list:
9 print(video["desc"]) # Opis
10 print(video["stats"]["playCount"]) # Wyświetlenia
11 print(video["video"]["playAddr"]) # Adres pobierania wideo (bez znaku wodnego)
12 print(video["video"]["downloadAddr"]) # Adres pobierania wideo (ze znakiem wodnym)
Krok 5: Wyciągnij URL-e do pobrania wideo.
Pole playAddr zwykle wskazuje czystszą wersję filmu (często bez nakładki znaku wodnego TikToka), natomiast downloadAddr zawiera standardowy watermark. Oba to bezpośrednie linki do pliku .mp4 — ale do pobrania wymagają konkretnych nagłówków (omówionych w sekcji pobierania poniżej).
Powinieneś teraz mieć listę obiektów z metadanymi filmów, z których każdy zawiera opis, statystyki, czas utworzenia, hashtagi (w challenges[] i textExtra) oraz bezpośrednie URL-e do wideo.
Ograniczenia metody ukrytego JSON
- Pobiera tylko dane z początkowego wczytania strony — zwykle pierwsze ~30 filmów z profilu
- Nie obsługuje nieskończonego przewijania ani paginacji (nie ma „następnej strony” do pobrania)
- Jeśli TikTok zmieni identyfikator tagu skryptu albo strukturę JSON, parser przestanie działać (zdarza się to okresowo — pomaga szybko to wykryć)
- Najlepsze zastosowanie: szybkie zrzuty profili, jednorazowe pobrania danych lub sytuacje, gdy potrzebujesz tylko najnowszych filmów
Metoda 2: Scrape’owanie filmów z TikToka przez wewnętrzne API
Frontend TikToka nie ładuje wszystkich filmów naraz — podczas przewijania wysyła żądania XHR do wewnętrznych endpointów API. Główny endpoint dla filmów użytkownika to /api/post/item_list/. Możesz wywołać go bezpośrednio z Pythona, co daje paginację opartą na cursorze i dostęp do wszystkich filmów z profilu, a nie tylko z pierwszej strony.
Jak znaleźć wewnętrzny endpoint API
Otwórz Chrome DevTools na stronie profilu TikToka, przejdź do zakładki Network, filtruj po XHR i przewijaj stronę w dół. Zobaczysz żądania do adresów podobnych do:
1https://www.tiktok.com/api/post/item_list/?WebIdLastTime=...&aid=1988&count=35&cursor=0&secUid=...
Najważniejsze parametry to:
secUid— unikalny identyfikator profilu (możesz go wyciągnąć z JSON z metody 1, spoduserInfo.user.secUid)cursor— offset paginacji (zaczyna się od0, każda odpowiedź zwraca kolejną wartość cursora)count— liczba elementów na stronę (zwykle 30–35)
Krok po kroku: zapytanie do wewnętrznego API TikToka w Pythonie
Krok 1: Pobierz secUid dla docelowego profilu.
Możesz go wyciągnąć z ukrytego JSON (Metoda 1) albo z HTML strony profilu.
Krok 2: Zbuduj i wyślij żądanie do API.
1import requests
2import json
3sec_uid = "MS4wLjABAAAA..." # Z metody 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()
Krok 3: Sparsuj odpowiedź.
Każdy element w data["itemList"] zawiera tę samą strukturę filmu co w Metodzie 1 — desc, stats, video.playAddr, video.downloadAddr itd.
Krok 4: Przechodź przez wszystkie strony wyników.
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"Pobrano {len(items)} filmów, łącznie: {len(all_videos)}, hasMore: {has_more}")
13print(f"Łączna liczba zebranych filmów: {len(all_videos)}")
Każda iteracja zwraca kolejną paczkę danych i nową wartość cursora. Pętla działa aż do momentu, gdy hasMore zwróci False.
Ograniczenia metody wewnętrznego API
- TikTok często zmienia te endpointy i wymagane parametry — to metoda o najwyższych wymaganiach utrzymaniowych. W ostatnich miesiącach niektóre żądania zaczęły wymagać
msToken,X-Boguslub innych parametrów podpisu generowanych przez TikToka (uwaga: odtworzenie tego w czystym Pythonie nie jest proste). - W zależności od typu danych mogą być potrzebne cookies sesyjne lub dodatkowe tokeny
- Nadal obowiązuje limitowanie na poziomie IP — zalecana jest rotacja proxy
- Jeśli zaczniesz dostawać puste tablice
itemList, TwójmsTokenprawdopodobnie jest nieaktualny (w przeglądarce rotuje mniej więcej co 10 sekund) - Najlepsze zastosowanie: masowa ekstrakcja danych, gdy potrzebujesz wszystkich filmów z profilu, a ograniczenie pierwszej strony z Metody 1 nie wystarcza
Metoda 3: Scrape’owanie filmów z TikToka za pomocą Playwrighta (automatyzacja przeglądarki)
Gdy pierwsze dwie metody napotykają przeszkody — wymaganie logowania, CAPTCHA albo parametry podpisu, których nie da się odtworzyć — Playwright staje się metodą awaryjną. Uruchamia prawdziwą (headless) przeglądarkę, porusza się po TikToku jak człowiek i potrafi obsługiwać renderowanie JavaScriptu, nieskończone przewijanie, a nawet sesje z zalogowanym użytkownikiem.
Konfiguracja Playwrighta do scrapowania TikToka
Zainstaluj Playwright i binaria przeglądarki:
1pip install playwright
2playwright install firefox
Do scrapowania TikToka polecam Firefox zamiast Chromium. Testy społeczności konsekwentnie pokazują z Firefoksem, a wykrywanie botów przez TikToka jest szczególnie agresywne wobec headless browserów opartych na Chromium.
Dla dodatkowej warstwy stealth rozważ połączenie Playwrighta z (zmodyfikowany fork Playwrighta) albo (Firefox zmodyfikowany na poziomie C++ pod kątem anty-detekcji). W Camoufox osiąga wyniki stealth niemal idealne wobec głównych usług wykrywania botów.
Krok po kroku: scrapowanie filmów z profilu TikToka za pomocą Playwrighta
Krok 1: Uruchom headless Firefox i przejdź do profilu.
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")
Krok 2: Poczekaj, aż załaduje się siatka filmów.
1 # Poczekaj, aż pojawią się elementy filmów
2 await page.wait_for_selector('[data-e2e="user-post-item"]', timeout=15000)
Jeśli TikTok pokaże nakładkę „Something went wrong”, możesz potrzebować kliknąć przycisk ponowienia:
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)
Krok 3: Wyciągnij dane z ukrytego JSON (nawet w Playwright).
Najbardziej niezawodne podejście to nadal pobranie JSON do hydracji, nawet jeśli używasz przeglądarki:
1 script_el = page.locator("#__UNIVERSAL_DATA_FOR_REHYDRATION__")
2 raw_json = await script_el.inner_text()
3 data = json.loads(raw_json)
4 # Ta sama nawigacja po JSON co w Metodzie 1
5 user_detail = data["__DEFAULT_SCOPE__"]["webapp.user-detail"]
6 videos = user_detail.get("itemList", [])
Krok 4: Obsłuż nieskończone przewijanie, jeśli potrzebujesz więcej filmów.
Jeśli potrzebujesz więcej niż pierwszych ~30 filmów, przewiń stronę w dół i przechwyć dodatkowe odpowiedzi XHR:
1 all_videos = list(videos)
2 # Przechwytuj odpowiedzi API podczas przewijania
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 # Przewijaj w dół, aby wywołać kolejne ładowania
13 for _ in range(5): # Dopasuj liczbę przewinięć do potrzeb
14 await page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
15 await asyncio.sleep(2)
16 # Zbierz filmy z przechwyconych odpowiedzi
17 for api_resp in api_responses:
18 items = api_resp.get("itemList", [])
19 all_videos.extend(items)
20 print(f"Łączna liczba filmów: {len(all_videos)}")
21 await browser.close()
22 return all_videos
23# Uruchomienie
24videos = asyncio.run(scrape_tiktok_profile("charlidamelio"))
Powinieneś teraz mieć listę obiektów wideo zarówno z pierwszego załadowania strony, jak i z kolejnych stron doładowanych podczas przewijania.
Ograniczenia metody Playwright
- Zdecydowanie najwolniejsza metoda (pełne renderowanie strony, rundy sieciowe, opóźnienia przewijania)
- Większe zużycie zasobów — każda instancja przeglądarki wykorzystuje sporo pamięci i CPU
- Nadal podatna na blokowanie po IP przy dużej skali — warto połączyć ją z rotacją proxy
- Najlepsze zastosowanie: złożone interakcje, treści za login wall, obsługa CAPTCHA albo sytuacje, gdy Metody 1 i 2 są blokowane
Jak pobrać filmy z TikToka (.mp4) w Pythonie
To właśnie sekcja, której brakuje w większości innych poradników o scrapowaniu TikToka. Pobieranie metadanych jest przydatne, ale większość osób wpisujących „scrape TikTok videos” chce przede wszystkim samych plików wideo.
TikTok osadza adresy pobierania w obiekcie danych filmu:
playAddr— zwykle wersja bez watermarka albo z mniej widocznym znakiem wodnymdownloadAddr— wersja przeznaczona do pobrania w aplikacji, zawierająca nakładkę z logo TikToka
Oba adresy są czasowo ograniczone i wygasają po krótkim czasie (zwykle po kilku godzinach), więc pobieranie trzeba wykonać szybko po ich wyciągnięciu.
Krok po kroku: pobieranie pliku wideo z TikToka
Krok 1: Wyciągnij URL wideo jedną z trzech metod opisanych wyżej.
1video_url = video["video"]["playAddr"] # Wersja bez watermarka
2# albo
3video_url = video["video"]["downloadAddr"] # Z watermarkiem
Krok 2: Wyślij żądanie GET z właściwymi nagłówkami.
To krok, na którym wiele osób się wykłada. Jeśli po prostu zrobisz requests.get(video_url), dostaniesz 403. TikTok sprawdza nagłówek Referer i oczekuje User-Agent podobnego do przeglądarki.
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)
Krok 3: Zapisz odpowiedź do pliku .mp4.
Użyj stream=True i zapisuj dane porcjami — filmy TikToka mogą być duże i nie chcesz ładować całego pliku do pamięci naraz:
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): # porcje po 1 MB
5 if chunk:
6 f.write(chunk)
7print(f"Pobrano: {filename}")
Powinieneś teraz mieć lokalnie działający plik .mp4.
Pobieranie z watermarkiem vs. bez watermarka
TikTok przechowuje zarówno wersję z watermarkiem, jak i bez niego. URL playAddr często zapewnia czystszą wersję (tę, której używa odtwarzacz), podczas gdy downloadAddr zawiera standardową nakładkę z logo TikToka oraz nazwą użytkownika twórcy.
Krótka uwaga etyczna: watermark służy do wskazania autora. Jeśli pobierasz filmy do badań, analizy albo wewnętrznego przeglądu, użycie playAddr jest zazwyczaj w porządku. Jeśli jednak planujesz redystrybucję albo ponowne publikowanie treści, usuwanie oznaczenia autora rodzi zarówno wątpliwości etyczne, jak i kwestie praw autorskich. Więcej na ten temat w sekcji prawnej poniżej.
Jeśli chcesz zbudować bardziej odporny pipeline pobierania, rozważ — jego ekstraktor TikToka automatycznie obsługuje obliczanie podpisów i rozwiązywanie URL-i, więc nie musisz samodzielnie zarządzać nagłówkami i wygasaniem tokenów.
Porównanie metod: którą metodę Pythona wybrać?
Oto tabela, którą chciałbym mieć, gdy zaczynałem pracę nad projektami scrapowania TikToka:
| Kryterium | Metoda 1: ukryty JSON | Metoda 2: wewnętrzne API | Metoda 3: Playwright |
|---|---|---|---|
| Poziom trudności | Początkujący | Średni | Średni |
| Szybkość | Szybka (1 żądanie na stronę) | Szybka (API JSON) | Wolna (pełne renderowanie strony) |
| Odporność na anty-bot | Średnia | Niska (endpointy się zmieniają) | Wysoka (naśladuje prawdziwą przeglądarkę) |
| Pobiera pliki .mp4? | Tak (wyciąga playAddr) | Tak (URL w odpowiedzi) | Tak (przechwytywanie ruchu sieciowego) |
| Obsługuje nieskończone przewijanie | Nie (tylko pierwsza strona) | Tak (paginacja cursorowa) | Tak (symulacja scrollowania) |
| Proxy potrzebne przy skali | Tak | Tak | Tak |
| Wymagane utrzymanie | Średnie (zmiany struktury JSON) | Wysokie (endpointy i podpisy często się zmieniają) | Nisko-średnie (przeglądarka adaptuje się lepiej) |
| Najlepsze dla | Szybkie jednorazowe zrzuty profili | Masowa ekstrakcja danych, wszystkie filmy | Treści za login wall lub złożone przypadki |
Moja rekomendacja:
- Potrzebujesz tylko szybkiego podglądu jednego profilu? Zacznij od Metody 1. Konfiguracja zajmuje około 30 sekund, a dane dostajesz w mniej niż sekundę na stronę.
- Chcesz wszystkie filmy z profilu wraz z paginacją? Wybierz Metodę 2, ale przygotuj się na utrzymanie kodu, gdy TikTok zmieni parametry API.
- Masz do czynienia z login wall, CAPTCHA albo potrzebujesz maksymalnej odporności? Metoda 3 z Playwrightem. Jest wolniejsza i cięższa, ale TikTokowi najtrudniej ją zablokować.
W praktyce często zaczynam od Metody 1 i dopiero przechodzę do Metody 2 lub 3, gdy napotkam ograniczenia. Dzięki temu infrastruktura jest prostsza, a koszty niższe.
Nie potrzebujesz Pythona? Scrapuj filmy z TikToka narzędziami no-code
Wiele osób szukających frazy „scrape TikTok videos with Python” tak naprawdę wcale nie potrzebuje Pythona. Potrzebują danych. Jeśli jesteś analitykiem marketingowym, który chce zdobyć metadane filmów z kilku profili konkurencji, albo brand managerem śledzącym wzmianki, konfiguracja środowiska Python z rotacją proxy i obsługą podpisów to zwyczajnie za dużo.

Oto uczciwe porównanie podejść:
| Podejście | Poziom umiejętności | Koszt | Utrzymanie | Najlepsze dla |
|---|---|---|---|---|
| Python (DIY) | Średniozaawansowany+ | Za darmo (+ koszty proxy) | Wysokie (skrypty się psują) | Pełna kontrola, własne pipeline’y |
| Thunderbit (rozszerzenie Chrome) | Początkujący | Dostępny darmowy plan | Brak (AI odczytuje stronę od nowa za każdym razem) | Szybka ekstrakcja danych wideo, eksport do Sheets/Excel |
| Apify TikTok Scraper | Początkujący | Płatne (za uruchomienie) | Niskie (utrzymywane przez Apify) | Masowe automatyczne uruchomienia według harmonogramu |
| TikAPI | Developer | Płatna subskrypcja | Średnie | Budowanie aplikacji na bazie danych z TikToka |
Jak Thunderbit radzi sobie ze scrapowaniem TikToka
to AI Web Scraper, który zbudowaliśmy w Thunderbit, i działa inaczej niż tradycyjne narzędzia do scrapowania. Zamiast opierać się na gotowych selektorach CSS lub regułach XPath, które psują się za każdym razem, gdy TikTok zmienia układ strony, AI Thunderbit odczytuje strukturę strony od nowa przy każdym uruchomieniu i proponuje odpowiednie kolumny — opis, polubienia, hashtagi, URL wideo, autor itd.
Przepływ pracy naprawdę sprowadza się do dwóch kliknięć:
- Otwórz profil TikToka w Chrome, kliknij rozszerzenie Thunderbit i wybierz „AI Suggest Fields”. Thunderbit przeskanuje stronę i zaproponuje strukturę tabeli.
- Sprawdź sugerowane kolumny, dopasuj je, jeśli trzeba, i kliknij „Scrape”.
Dane eksportują się bezpośrednio do Google Sheets, Excel, Airtable lub Notion. Bez utrzymywania selektorów CSS, bez debugowania kodu, bez konfiguracji proxy. Dla analityka marketingowego, który potrzebuje metadanych wideo z kilku profili, to rozwiązanie jest zauważalnie szybsze niż przygotowanie środowiska Python — i nie psuje się, gdy TikTok aktualizuje front-end (a według raportów społeczności dzieje się to co kilka tygodni).
Thunderbit obsługuje też — może wejść na każdą pojedynczą stronę filmu, aby wzbogacić tabelę o dodatkowe informacje, takie jak pełna liczba komentarzy, dane o muzyce czy długość wideo.
Możesz wypróbować go za darmo przez . Więcej o działaniu znajdziesz na naszym .
Prawne i etyczne granice scrapowania TikToka
Zero z wysoko pozycjonowanych poradników na ten temat nie porusza kwestii legalności, co jest dość znaczącym pominięciem, biorąc pod uwagę, że TikTok aktywnie podejmował działania prawne przeciwko usługom scrapującym. Oto, co warto wiedzieć.
Regulamin TikToka (§ 4.1) wyraźnie zakazuje automatycznego dostępu. Naruszenie regulaminu nie jest przestępstwem karnym, lecz złamaniem umowy — ale może skończyć się banem konta, blokadą IP albo pozwem cywilnym.
Otoczenie prawne jest bardziej liberalne, niż wiele osób zakłada, jeśli chodzi o dane publiczne. Najważniejszym precedensem jest sprawa Meta Platforms v. Bright Data (N.D. Cal., styczeń 2024), w której sąd uznał, że scrapowanie publicznie dostępnych danych przy wylogowaniu nie narusza regulaminu Meta. Meta wycofała sprawę i zrzekła się apelacji. Wcześniejszy wyrok w sprawie hiQ v. LinkedIn w sądzie apelacyjnym Ninth Circuit (potwierdzony po Van Buren) ustalił, że scrapowanie publicznie dostępnych danych nie stanowi naruszenia CFAA — choć hiQ finalnie zawarło ugodę, zapłaciło 500 tys. dolarów i zgodziło się na stały zakaz, co pokazuje, że egzekwowanie regulaminu nadal może boleć.
GDPR i CCPA mają zastosowanie, jeśli zbierasz dane osobowe użytkowników z UE lub Kalifornii. Scrapowanie publicznych postów to jedno; tworzenie baz danych zawierających osobiste informacje o konkretnych użytkownikach to coś zupełnie innego.
Praktyczne wskazówki:
- Ograniczaj tempo żądań (nie bombarduj serwerów TikToka)
- Nie scrapuj prywatnych kont ani treści należących do nieletnich
- Nie rozpowszechniaj komercyjnie chronionych prawem autorskim filmów
- Szanuj
robots.txt(TikTok blokuje w nim większość automatycznego crawlowania) - Pobieranie filmów do prywatnych badań lub analizy to co innego niż ich ponowne publikowanie — rozumiej tę różnicę
Zastrzeżenie: To treść edukacyjna, nie porada prawna. Jeśli budujesz komercyjny produkt oparty na danych scrapowanych z TikToka, skonsultuj się z prawnikiem.
Podsumowanie: najważniejsze wnioski
Scrapowanie TikToka w 2025 roku to ruchomy cel. Warstwa anty-botowa platformy należy do najbardziej zaawansowanych w sieci, a naiwnie napisane podejścia (zwykłe requests, fragmenty wygenerowane przez ChatGPT, nieaktualne poradniki) zawiodą. Ale przy właściwej metodzie jest to jak najbardziej wykonalne.
Najważniejsze wnioski:
- Metoda 1 (ukryty JSON) jest najszybsza i najprostsza — zacznij od niej, jeśli potrzebujesz szybkiego zrzutu profilu.
- Metoda 2 (wewnętrzne API) daje paginację i dostęp do dużych zbiorów danych, ale wymaga najwięcej utrzymania, bo endpointy i wymagania dotyczące podpisów często się zmieniają.
- Metoda 3 (Playwright) najlepiej radzi sobie z zabezpieczeniami anty-botowymi, kosztem szybkości i zużycia zasobów.
- Wszystkie trzy metody pozwalają wyciągnąć URL-e do pobrania filmów — a ten poradnik jako jedyny pokazuje też, jak faktycznie pobrać pliki .mp4 z właściwymi nagłówkami.
- Dla osób nietechnicznych oferuje naprawdę szybszą drogę do tych samych danych bez pisania i utrzymywania kodu. Jego podejście oparte na AI sprawia, że nie psuje się, gdy TikTok zmienia układ strony — a z relacji społeczności wynika, że dzieje się to częściej, niż ktokolwiek by chciał.
Jeśli chcesz zacząć bez konfiguracji Pythona, — darmowy plan wystarczy, żeby przetestować je na kilku profilach i sprawdzić, czy pasuje do Twojego workflow. Jeśli wybierasz drogę w Pythonie, zacznij od Metody 1, zweryfikuj dane i dopiero potem skaluj dalej.
Chcesz zgłębić temat web scrapingu? Sprawdź nasze poradniki o , oraz .
FAQ
Czy scrapowanie filmów z TikToka w Pythonie jest legalne?
Scrapowanie publicznie dostępnych danych to prawnie szara strefa, a nie jednoznaczne naruszenie. Wyrok Meta v. Bright Data (2024) wspiera stanowisko, że scrapowanie publicznych danych po wylogowaniu nie narusza regulaminów platform. Jednak regulamin TikToka wyraźnie zakazuje automatycznego dostępu, a do danych osobowych mają zastosowanie obowiązki wynikające z GDPR/CCPA. To nie jest nielegalne w sposób, jakiego większość ludzi się obawia, ale też nie jest całkowicie bez ryzyka. W konkretnym przypadku skonsultuj się ze specjalistą prawnym.
Jaka jest najlepsza biblioteka Pythona do scrapowania TikToka?
To zależy od podejścia. Do ekstrakcji ukrytego JSON (Metoda 1) wystarczy requests + beautifulsoup4. Do wywołań wewnętrznego API (Metoda 2) sprawdzi się requests lub httpx. Do automatyzacji przeglądarki (Metoda 3) obecnym standardem jest playwright — w nowych projektach scrapingowych wyprzedził Selenium pod względem popularności, z wobec około 53 milionów w przypadku Selenium. Warto też rozważyć wrapper TikTok-Api (~6,3 tys. gwiazdek na GitHubie), jeśli chcesz wyższy poziom abstrakcji, choć bywa kruchy.
Czy mogę pobierać filmy z TikToka bez znaku wodnego, używając Pythona?
Tak. Dane TikToka zawierają URL playAddr, który zwykle prowadzi do wersji filmu bez standardowej nakładki watermarka. Ten poradnik pokazuje, jak wyciągnąć ten adres jedną z trzech metod i pobrać plik .mp4 z odpowiednimi nagłówkami. Z kolei pole downloadAddr zawiera watermark.
Dlaczego mój scraper TikToka zwraca puste dane?
Najczęstszą przyczyną jest to, że TikTok wymaga JavaScriptu do renderowania treści. Zwykłe requests.get() pobiera tylko szkielet HTML — właściwe dane znajdują się albo w ukrytym tagu skryptu JSON (Metoda 1), albo są ładowane dynamicznie przez JavaScript (Metoda 3). Jeśli dostajesz pusty HTML, najpierw spróbuj Metody 1. Jeśli to nie pomoże, sprawdź nagłówki (brak Referer to najczęstsza przyczyna błędów 403) albo przejdź do Metody 3 z Playwrightem.
Jak uniknąć blokady podczas scrapowania TikToka?
Używaj realistycznych nagłówków przeglądarki (w tym User-Agent, Referer i Accept-Language), rotuj proxy residential lub mobile (adresy IP z centrów danych są oznaczane w ciągu minut), dodawaj losowe opóźnienia między żądaniami (minimum 1–3 sekundy) i nie scrapuj z ekstremalnie dużą częstotliwością. Metoda 3 (Playwright) daje największą odporność na blokady, bo naśladuje prawdziwą sesję przeglądarki. Przy większej skali warto uwzględnić koszt proxy — podstawowe proxy residential kosztują około u największych dostawców.
- Dowiedz się więcej