TikTok ma dziś około , a twórcy publikują tam szacunkowo 23 miliony filmów każdego dnia. Jeśli kiedykolwiek próbowałeś wyciągnąć choćby niewielką część tych danych, wiesz, jak szybko robi się z tego pod górkę.
Zwykle wygląda to tak: wpisujesz w Google „scrape TikTok videos with Python”, kopiujesz fragment z poradnika (albo prosisz ChatGPT o napisanie kodu), uruchamiasz go i dostajesz… nic. Pusty HTML. Błąd 403. Albo słynne „Process finished with exit code 0” bez żadnego wyniku. Widziałem ten sam schemat w dziesiątkach wątków na GitHubie i Reddicie — i właśnie dlatego przygotowałem ten przewodnik. Pokażę trzy metody w Pythonie, które faktycznie działają w 2025 roku, przeprowadzę Cię krok po kroku przez pobieranie prawdziwych plików .mp4 (a nie tylko metadanych — bo na tym kończy się większość innych poradników) oraz dorzucę tabelę porównawczą, żebyś mógł wybrać najlepsze podejście do swojego przypadku. A jeśli wcale nie potrzebujesz Pythona, pokażę też opcje no-code, takie jak , które pozwolą Ci zdobyć te same dane w dosłownie dwa kliknięcia.
Co właściwie oznacza „scraping filmów z TikToka”?
Zanim przejdziemy do kodu, warto doprecyzować, co ludzie mają na myśli, gdy mówią „scrape TikTok videos” — bo pod tym hasłem kryją się tak naprawdę dwie różne rzeczy:
- Wyodrębnianie metadanych filmu: 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 dysku. To właśnie tego naprawdę szuka większość osób, wpisując „scrape TikTok videos” — i to jest część, której prawie nikt nie opisuje.
Ten przewodnik obejmuje oba scenariusze. Każda z poniższych metod pozwala wyciągnąć metadane i uzyskać adresy pobierania potrzebne do zapisania plików .mp4.
Dlaczego warto pobierać filmy z TikToka w Pythonie?
Przy i generowanych przez TikTok Shop, biznesowy potencjał danych z TikToka jest ogromny. Najczęstsze zastosowania, jakie widzę, to:
| Przypadek użycia | Co pobierasz | 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 contentowa | Trendujące hashtagi, wiralowe formaty filmów, częstotliwość publikacji | Twórcy treści, social media managerowie | | Monitoring marki | Wzmianki, zasięg kampanii, sentyment odbiorców | Brand managerowie, zespoły PR | | Analiza konkurencji | Wyniki filmów konkurencji, kreacje reklamowe, oferty w TikTok Shop | E-commerce, zespoły produktowe | | Badania rynku | Nowe trendy, zachowania odbiorców, odkrywanie produktów | Analitycy, fundusze hedgingowe, firmy badawcze | | Archiwizacja i compliance | Pliki wideo do wewnętrznego audytu lub dokumentacji | Działy prawne, compliance, agencje |
Stawka jest naprawdę wysoka: prognozowane przychody z reklam TikToka w USA mają wynieść 23,4 miliarda dolarów w 2026 roku, a twórcy afiliacyjni generują w najpopularniejszych kategoriach TikTok Shop. Jeśli działasz w e-commerce albo marketingu influencerów, 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# ...i potem w HTML nie ma nic użytecznego
Powód jest prosty: TikTok to jedna z najtrudniejszych platform do scrapowania. Zwykły requests.get() zwraca głównie pustą powłokę HTML, bo właściwa treść jest renderowana przez JavaScript w przeglądarce. Do tego TikTok stosuje rozbudowany system anty-botowy: wykrywanie zachowań, fingerprinting TLS, generującą podpisy żądań oraz dynamiczne selektory CSS, które potrafią zmienić się bez ostrzeżenia.

Zgodnie z raportem Imperva 2025 Bad Bot Report, ruch generowany przez boty po raz pierwszy w 2024 roku przewyższył ruch ludzki — boty odpowiadają dziś za . TikTok doskonale zdaje sobie z tego sprawę i zbudował swoje zabezpieczenia odpowiednio mocno.
Oto szybka tabela diagnostyczna, która pomoże Ci ustalić, co poszło nie tak i którą metodę wybrać:
| Objaw | Prawdopodobna przyczyna | Metoda naprawy |
|---|---|---|
| Pusty HTML / brak danych | Treść renderowana przez JS; requests nie uruchamia JavaScriptu | Metoda 1 (ukryty JSON) lub Metoda 3 (Playwright) |
| 403 / Access Denied | Brakujące lub błędne nagłówki; wykrycie 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 / cookie | 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 to mniej więcej 30–60 żądań na minutę z jednego IP, zanim pojawią się miękkie blokady albo CAPTCHA. Adresy z centrów danych są oznaczane po kilku minutach — proxy residential lub mobile są w praktyce obowiązkowe przy większej skali.
Przegląd: 3 metody pobierania filmów z TikToka w Pythonie
Oto plan działania. Każda metoda ma inne plusy i minusy, a poniżej znajdziesz trzy działające podejścia z kodem:
- Wyciąganie ukrytego JSON-a — parsowanie znacznika
__UNIVERSAL_DATA_FOR_REHYDRATION__osadzonego w stronach TikToka. Najszybsze, najprostsze, bez przeglądarki. - Wewnętrzne API TikToka — bezpośrednie wywołanie nieudokumentowanego endpointu
/api/post/item_list/do pobierania większych zbiorów danych z paginacją opartą na cursorze. - Automatyzacja przeglądarki z Playwright — renderowanie stron w headless browserze, aby obsłużyć nieskończone przewijanie, dynamiczną zawartość i login wall.
Wszystkie trzy metody mogą też służyć do pobierania plików .mp4 — opisuję to w osobnej sekcji po omówieniu metod. Na końcu znajdziesz pełną tabelę porównawczą, żeby podjąć świadomą decyzję.
Metoda 1: Pobieranie filmów z TikToka przez ukryty JSON (dla początkujących)
To podejście polecam na start. TikTok osadza ogromny blok JSON w tagu <script> z id __UNIVERSAL_DATA_FOR_REHYDRATION__ praktycznie przy każdym ładowaniu strony. Ten blok zawiera wszystkie dane profilu i filmów, które front-end normalnie renderowałby w JavaScript — co oznacza, że możesz je pobrać jednym zapytaniem HTTP, bez przeglądarki.
Czego potrzebujesz
- Python 3.8+
requests(lubhttpx)beautifulsoup4(lubparsel)- Poprawne nagłówki:
User-Agent,Referer,Accept-Language
Instalacja zależności:
1pip install requests beautifulsoup4
Krok po kroku: wyciąganie danych o filmach z TikToka z tagu script
Krok 1: Wyślij żądanie GET z realistycznymi nagłówkami przeglądarki.
Na tym etapie wykłada się większość początkujących. Jeśli wyślesz gołe requests.get() bez nagłówków, TikTok zwróci 403 albo stronę CAPTCHA. Potrzebujesz co najmniej aktualnego User-Agent przeglądarki i nagłówka 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: Parsuj HTML i znajdź tag script z danymi rehydration.
1soup = BeautifulSoup(resp.text, "html.parser")
2script_tag = soup.find("script", id="__UNIVERSAL_DATA_FOR_REHYDRATION__")
Jeśli script_tag ma wartość None, TikTok albo Cię zablokował (sprawdź kod odpowiedzi), albo zmienił identyfikator taga (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 zagnieżdża się 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)
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 filmu (bez znaku wodnego)
12 print(video["video"]["downloadAddr"]) # Adres pobierania filmu (ze znakiem wodnym)
Krok 5: Wyciągnij adresy pobierania filmów.
Pole playAddr zazwyczaj wskazuje na czystszą wersję filmu (często bez nakładki z watermarkiem TikToka), a downloadAddr zawiera standardowy znak wodny. Oba to bezpośrednie adresy plików .mp4 — ale do pobrania wymagają konkretnych nagłówków (opisanych niżej w sekcji pobierania).
Teraz powinieneś mieć listę obiektów z metadanymi filmów, a w nich opis, statystyki, czas publikacji, hashtagi (w challenges[] i textExtra) oraz bezpośrednie URL-e do filmów.
Ograniczenia metody ukrytego JSON-a
- Zbiera tylko dane z początkowego ładowania strony — zwykle pierwsze ~30 filmów z profilu
- Nie obsługuje nieskończonego przewijania ani paginacji (nie ma „następnej strony” do wywołania)
- Jeśli TikTok zmieni identyfikator taga lub strukturę JSON, parser przestaje działać (dzieje się to okresowo — pomaga wykryć problem wcześniej)
- Najlepsza do: szybkich pobrań profili, jednorazowego zbierania danych lub gdy potrzebujesz tylko najnowszych filmów
Metoda 2: Pobieranie filmów z TikToka przez wewnętrzne API
Front-end TikToka nie ładuje wszystkich filmów naraz — podczas przewijania wykonuje zapytania 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, zyskując paginację opartą na cursorze i dostęp do wszystkich filmów na 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, ustaw filtr XHR i przewiń stronę w dół. Zobaczysz żądania do adresów takich jak:
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 pobrać z JSON-a z Metody 1, zuserInfo.user.secUid)cursor— offset paginacji (startuje od0, każda odpowiedź zwraca następny cursor)count— liczba elementów na stronę (zwykle 30–35)
Krok po kroku: odpytywanie wewnętrznego API TikToka w Pythonie
Krok 1: Pobierz secUid docelowego profilu.
Możesz go wziąć z ukrytego JSON-a (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: Przejdź 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"Łącznie pobranych filmów: {len(all_videos)}")
Każda iteracja zwraca kolejną partię danych i nowy cursor. Pętla działa, dopóki hasMore ma wartość False.
Ograniczenia metody wewnętrznego API
- TikTok często zmienia te endpointy i wymagane parametry — to metoda o najwyższym poziomie utrzymania. W ostatnich miesiącach niektóre żądania zaczęły wymagać
msToken,X-Bogusalbo innych parametrów podpisu generowanych przez (uwaga: odtworzenie tego w czystym Pythonie nie jest trywialne). - Dla niektórych typów danych może być potrzebny cookie sesji lub dodatkowe tokeny
- Nadal obowiązuje limitowanie po IP — zalecana jest rotacja proxy
- Jeśli zaczynają zwracać się puste tablice
itemList, TwójmsTokenjest prawdopodobnie nieaktualny (w przeglądarce rotuje mniej więcej co 10 sekund) - Najlepsza do: masowego pobierania danych, gdy potrzebujesz wszystkich filmów z profilu i ograniczenie pierwszej strony z Metody 1 Ci nie wystarcza
Metoda 3: Pobieranie filmów z TikToka z Playwright (automatyzacja przeglądarki)
Gdy dwie pierwsze metody napotykają przeszkody — wymagane logowanie, CAPTCHA albo parametry podpisu, których nie da się łatwo odtworzyć — Playwright staje się planem B. Uruchamia prawdziwą przeglądarkę (headless), wchodzi na TikToka jak zwykły użytkownik i potrafi obsłużyć renderowanie JavaScriptu, nieskończone przewijanie, a nawet zalogowane sesje.
Konfiguracja Playwright do scrapingu TikToka
Zainstaluj Playwright i jego binaria przeglądarek:
1pip install playwright
2playwright install firefox
Do scrapowania TikToka polecam Firefox zamiast Chromium. Testy społeczności regularnie pokazują z Firefoxem, a system anty-botowy TikToka jest szczególnie agresywny wobec headless browserów opartych na Chromium.
Dla dodatkowej warstwy stealth warto połączyć Playwright z (zmodyfikowany fork Playwright) albo (Firefox przerobiony na poziomie C++ pod kątem wykrywania botów). W Camoufox osiąga niemal idealne wyniki stealth względem głównych systemów detekcji botów.
Krok po kroku: scrapowanie filmów z profilu TikToka za pomocą Playwright
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 na pojawienie się elementów wideo
2 await page.wait_for_selector('[data-e2e="user-post-item"]', timeout=15000)
Jeśli TikTok pokaże overlay „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: Pobierz dane z ukrytego JSON-a (nawet w Playwright).
Najpewniejsze podejście to nadal wyciągnięcie JSON-a rehydration, nawet jeśli korzystasz z 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-ie 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 chcesz pobrać więcej niż początkowe ~30 filmów, przewijaj stronę i przechwytuj kolejne 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): # W razie potrzeby zwiększ liczbę przewinięć
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 początkowego ładowania strony, jak i z dodatkowych stron doładowanych przez przewijanie.
Ograniczenia metody Playwright
- Zdecydowanie najwolniejsza metoda (pełny render strony, rundy sieciowe, opóźnienia przewijania)
- Większe zużycie zasobów — każda instancja przeglądarki zużywa sporo pamięci i CPU
- Nadal narażona na blokady po IP przy większej skali — warto połączyć z rotacją proxy
- Najlepsza do: złożonych interakcji, treści za login wall, omijania CAPTCHA albo sytuacji, gdy Metody 1 i 2 są blokowane
Jak pobrać filmy z TikToka (.mp4) w Pythonie
To właśnie ta sekcja wypełnia największą lukę w większości poradników o TikToku. Wyciągnięcie metadanych jest przydatne, ale większość osób wpisujących „scrape TikTok videos” chce jednak samych plików wideo.
TikTok zapisuje adresy pobierania w obiekcie danych filmu:
playAddr— zwykle wersja bez znaku wodnego albo z jego mniejszą wersjądownloadAddr— wersja przeznaczona do pobierania w aplikacji, z nakładką znaku wodnego TikToka
Oba adresy są czasowo ważne 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 adres filmu z jednej z trzech metod powyżej.
1video_url = video["video"]["playAddr"] # Wersja bez znaku wodnego
2# albo
3video_url = video["video"]["downloadAddr"] # Z watermarkiem
Krok 2: Wyślij żądanie GET z odpowiednimi nagłówkami.
To właśnie ten krok najczęściej sprawia problemy. 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 z TikToka mogą być duże i nie chcesz ładować całego pliku do pamięci:
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}")
Teraz powinieneś mieć lokalnie odtwarzalny plik .mp4.
Pobieranie z watermarkiem i bez watermarka
TikTok przechowuje zarówno wersję ze znakiem wodnym, jak i bez niego. Adres playAddr często prowadzi do czystszej wersji filmu (tej, której używa odtwarzacz), natomiast downloadAddr zawiera watermark TikToka z nazwą autora.
Mała uwaga etyczna: watermark służy do wskazania autora. Jeśli pobierasz filmy do badań, analizy albo użytku wewnętrznego, korzystanie z playAddr jest zazwyczaj w porządku. Jeśli planujesz dalej publikować lub rozpowszechniać treści, usunięcie oznaczenia autora rodzi zarówno kwestie etyczne, jak i prawne związane z prawami autorskimi. Więcej na ten temat w sekcji prawnej poniżej.
Jeśli chcesz stworzyć solidniejszy pipeline pobierania, rozważ — jego extractor do TikToka automatycznie obsługuje obliczanie podpisów i rozwiązywanie adresów URL, więc nie musisz samodzielnie pilnować nagłówków i wygaśnięcia tokenów.
Porównanie obok siebie: którą metodę Pythona wybrać?
Oto tabela porównawcza, której sam bym potrzebował, kiedy zaczynałem pracę nad projektami scrapingu 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 (JSON API) | Wolna (pełny render 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 scrolla) |
| Proxy potrzebne przy skali | Tak | Tak | Tak |
| Wymagana konserwacja | Średnia (zmiany struktury JSON) | Wysoka (endpointy/podpisy zmieniają się często) | Niska–średnia (przeglądarka lepiej sobie radzi) |
| Najlepsza do | Szybkich, jednorazowych scrapów profili | Masowego pobierania danych, wszystkich filmów | Treści za login wall lub bardziej złożonych przypadków |
Moja rekomendacja:
- Chcesz tylko szybki podgląd jednego profilu? Zacznij od Metody 1. Konfiguracja zajmuje około 30 sekund, a dane zwracane są w mniej niż sekundę na stronę.
- Potrzebujesz wszystkich filmów z profilu z paginacją? Wybierz Metodę 2, ale przygotuj się na utrzymanie kodu, gdy TikTok zmieni parametry API.
- Masz login wall, CAPTCHA albo potrzebujesz maksymalnej odporności? Metoda 3 z Playwright. Jest wolniejsza i cięższa, ale TikTokowi najtrudniej ją zablokować.
W praktyce zwykle zaczynam od Metody 1 i dopiero potem przechodzę do Metody 2 lub 3, jeśli natrafię na ograniczenia. Dzięki temu infrastruktura pozostaje prosta, a koszty niskie.
Nie potrzebujesz Pythona? Pobieraj filmy z TikToka bez kodowania
Wiele osób wpisujących „scrape TikTok videos with Python” tak naprawdę nie potrzebuje Pythona. Potrzebują danych. Jeśli jesteś analitykiem marketingowym, który chce metadanych wideo z kilku profili konkurencji, albo brand managerem śledzącym wzmianki, to stawianie środowiska Pythona, rotacji proxy i obsługi podpisów będzie po prostu przerostem formy nad treścią.

Oto uczciwe porównanie podejść:
| Podejście | Poziom umiejętności | Koszt | Utrzymanie | Najlepsze do | |---|---|---|---|---| | Python (DIY) | Średni+ | Darmowy (+ koszty proxy) | Wysokie (skrypty się psują) | Pełna kontrola, własne pipeline’y | | (rozszerzenie Chrome) | Początkujący | Dostępny plan darmowy | Brak (AI analizuje stronę od nowa za każdym razem) | Szybkie wyciąganie danych o filmach, eksport do Sheets/Excel | | Apify TikTok Scraper | Początkujący | Płatny (za uruchomienie) | Niskie (utrzymywane przez Apify) | Masowe, automatyczne uruchomienia według harmonogramu | | TikAPI | Programista | Płatna subskrypcja | Średnie | Budowanie aplikacji na danych z TikToka |
Jak Thunderbit radzi sobie ze scrapingiem TikToka
to AI Web Scraper, który stworzyliśmy w Thunderbit, i działa inaczej niż tradycyjne narzędzia do scrapingu. Zamiast opierać się na gotowych selektorach CSS albo regułach XPath (które psują się za każdym razem, gdy TikTok zmieni układ strony), AI Thunderbit analizuje stronę na nowo przy każdym uruchomieniu i podpowiada odpowiednie kolumny — opis, polubienia, hashtagi, URL filmu, autor itd.
Proces naprawdę sprowadza się do dwóch kliknięć:
- Wejdź na profil TikToka w Chrome, kliknij rozszerzenie Thunderbit i wybierz „AI Suggest Fields”. Thunderbit przeskanuje stronę i zaproponuje strukturę tabeli.
- Sprawdź sugerowane kolumny, popraw je jeśli trzeba i kliknij „Scrape”.
Dane eksportują się bezpośrednio do Google Sheets, Excel, Airtable albo Notion. Bez selektorów CSS do utrzymania, bez kodu do debugowania, bez konfiguracji proxy. Dla analityka marketingowego, który potrzebuje metadanych filmów z kilku profili, to rozwiązanie jest wyraźnie szybsze niż stawianie środowiska Pythona — i nie psuje się, gdy TikTok aktualizuje front-end (a z relacji społeczności wynika, że dzieje się to co kilka tygodni).
Thunderbit obsługuje też — może wejść na każdą pojedynczą stronę filmu i wzbogacić tabelę o dodatkowe informacje, takie jak pełna liczba komentarzy, dane o muzyce czy długość filmu.
Możesz przetestować go za darmo przez . Więcej o tym, jak działa, znajdziesz na naszym .
Ramy prawne i etyczne przy scrapowaniu TikToka
Zero z najwyżej pozycjonowanych poradników na ten temat nie wspomina o legalności, a to spore przeoczenie — szczególnie że TikTok aktywnie podejmował działania prawne przeciwko usługom scrapingowym. Oto, co warto wiedzieć.
Regulamin TikToka (§ 4.1) wyraźnie zakazuje automatycznego dostępu. Naruszenie regulaminu to złamanie umowy, a nie przestępstwo — ale może skutkować blokadą konta, blokadą IP albo działaniami cywilnymi.
Sytuacja prawna jest bardziej liberalna, niż wielu osobom się wydaje, jeśli chodzi o publiczne dane. Kluczowym 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 hiQ v. LinkedIn w 9. okręgu (potwierdzony po Van Buren) ustalił, że scrapowanie publicznie dostępnych danych nie stanowi naruszenia CFAA — choć hiQ ostatecznie zawarło ugodę, zapłaciło 500 tys. dolarów i zgodziło się na stały nakaz sądowy, 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, a budowanie baz danych z osobistymi informacjami konkretnych osób to coś zupełnie innego.
Praktyczne zasady:
- Ograniczaj tempo żądań (nie obciążaj serwerów TikToka)
- Nie scrapuj prywatnych kont ani treści należących do niepełnoletnich
- 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 repostowanie — warto znać tę różnicę
Zastrzeżenie: To materiał edukacyjny, nie porada prawna. Jeśli budujesz komercyjny produkt na danych scrapowanych z TikToka, skonsultuj się z prawnikiem.
Podsumowanie: najważniejsze wnioski
Scraping TikToka w 2025 roku to ruchomy cel. System anty-botowy tej platformy należy do najbardziej zaawansowanych w sieci, a naiwne podejścia (gołe requests, fragmenty wygenerowane przez ChatGPT, przestarzałe poradniki) po prostu nie zadziałają. Ale przy odpowiedniej metodzie da się to zrobić bez problemu.
Najważniejsze wnioski:
- Metoda 1 (ukryty JSON) jest najszybsza i najprostsza — zacznij od niej przy szybkim pobieraniu danych z profilu.
- Metoda 2 (wewnętrzne API) daje paginację i dostęp do większej ilości 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 zasobów.
- Wszystkie trzy metody pozwalają wyciągnąć adresy pobierania filmów — a ten przewodnik jako jedyny pokazuje także, jak faktycznie pobrać pliki .mp4 z poprawnymi nagłówkami.
- Dla użytkowników nietechnicznych oferuje naprawdę szybszą drogę do tych samych danych bez pisania i utrzymywania kodu. Jego podejście oparte na AI oznacza, że nie psuje się, gdy TikTok zmienia układ strony — a według doniesień społeczności 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ę Pythona, zacznij od Metody 1, zweryfikuj dane i dopiero potem skaluj rozwiązanie.
Chcesz wejść głębiej w techniki web scrapingu? Sprawdź nasze poradniki o , oraz .
FAQ
Czy scrapowanie filmów z TikToka w Pythonie jest legalne?
Scrapowanie publicznie dostępnych danych to prawny obszar szary, a nie jednoznaczne naruszenie. Wyrok Meta v. Bright Data (2024) wspiera stanowisko, że scrapowanie publicznych danych przy wylogowaniu nie narusza regulaminu platformy. Jednak regulamin TikToka wyraźnie zakazuje automatycznego dostępu, a GDPR/CCPA nakładają obowiązki przy danych osobowych. To nie jest nielegalne w sposób, jakiego większość osób się obawia, ale też nie jest całkowicie bez ryzyka. W konkretnym przypadku warto skonsultować się ze specjalistą prawnym.
Jaka jest najlepsza biblioteka Pythona do scrapowania TikToka?
To zależy od podejścia. Do wyciągania ukrytego JSON-a (Metoda 1) wystarczą requests + beautifulsoup4. Do wywołań wewnętrznego API (Metoda 2) sprawdzi się requests albo httpx. Do automatyzacji przeglądarki (Metoda 3) obecnym standardem jest playwright — w nowych projektach scrapingu wyprzedził Selenium, z wobec ~53 milionów w przypadku Selenium. Warto też rozważyć wrapper TikTok-Api (około 6,3 tys. gwiazdek na GitHubie), jeśli chcesz wyższy poziom abstrakcji, choć bywa kapryśny.
Czy mogę pobrać filmy z TikToka bez znaku wodnego w Pythonie?
Tak. Dane TikToka zawierają URL playAddr, który zwykle prowadzi do wersji filmu bez standardowej nakładki znaku wodnego. Ten przewodnik pokazuje, jak wyciągnąć ten adres z każdej z trzech metod i pobrać plik .mp4 z odpowiednimi nagłówkami. Pole downloadAddr z kolei zawiera watermark.
Dlaczego mój scraper do TikToka zwraca puste dane?
Najczęstszy powód jest taki, że TikTok wymaga JavaScriptu do wyrenderowania treści. Zwykły requests.get() pobiera tylko HTML-powłokę — właściwe dane znajdują się albo w ukrytym tagu script z JSON-em (Metoda 1), albo są ładowane dynamicznie przez JavaScript (Metoda 3). Jeśli dostajesz pusty HTML, spróbuj najpierw Metody 1. Jeśli to nie zadziała, sprawdź nagłówki (brak Referer to najczęstsza przyczyna błędów 403) albo przejdź do Metody 3 z Playwright.
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 z centrów danych są oznaczane w ciągu kilku minut), dodawaj losowe opóźnienia między żądaniami (minimum 1–3 sekundy) i nie scrapuj z bardzo dużą intensywnością. Metoda 3 (Playwright) daje najwyższą odporność na blokady, bo naśladuje prawdziwą sesję przeglądarki. Przy większej skali warto uwzględnić koszty proxy — podstawowe proxy residential kosztują zwykle około u głównych dostawców.