TikTok kini memiliki sekitar 1,9 miliar pengguna aktif bulanan dan para kreator mengunggah sekitar 23 juta video setiap harinya. Kalau kamu pernah coba mengambil data bahkan dari sebagian kecil aliran data sebesar itu, kamu pasti paham betapa ribetnya.
Biasanya alurnya begini: kamu mencari "scrape TikTok videos with Python," menyalin potongan kode dari tutorial (atau minta ChatGPT menuliskannya), menjalankannya, lalu hasilnya… nihil. HTML kosong. Error 403. Atau yang lebih nyebelin, "Process finished with exit code 0" tanpa output sama sekali. Saya sudah berkali-kali melihat pola ini di issue GitHub dan thread Reddit, dan itulah alasan saya menyusun panduan ini. Kita akan membahas tiga metode Python yang benar-benar masih bekerja di 2025, panduan lengkap untuk mengunduh file video .mp4 asli (bukan sekadar metadata — yang biasanya jadi batas akhir tutorial lain), serta tabel perbandingan supaya kamu bisa memilih pendekatan yang paling pas. Kalau sebenarnya kamu tidak butuh Python, saya juga akan bahas alternatif tanpa kode seperti Thunderbit yang bisa memberi kamu data yang sama hanya dalam dua klik.
Apa Sebenarnya Maksud dari "Scraping TikTok Videos"?
Sebelum masuk ke kode, penting untuk menjelaskan dulu apa yang dimaksud orang ketika bilang "scrape TikTok videos" — karena istilah ini bisa merujuk ke dua hal yang sangat berbeda:
- Mengambil metadata video: caption, hashtag, jumlah likes, komentar, shares, views, tanggal posting, informasi pembuat. Ini yang jadi fokus kebanyakan tutorial.
- Mengunduh file video asli (.mp4): menyimpan videonya langsung ke perangkat kamu. Inilah yang sebenarnya dicari kebanyakan orang saat mengetik "scrape TikTok videos" — dan bagian inilah yang hampir tidak pernah dibahas.
Panduan ini membahas keduanya. Setiap metode di bawah bisa mengambil metadata dan memberi kamu URL unduhan yang diperlukan untuk menyimpan file .mp4.
Kenapa Scrape Video TikTok dengan Python?
Dengan sekitar 280 video ditonton per pengguna per hari dan TikTok Shop menghasilkan lebih dari $33 miliar pendapatan iklan global, alasan bisnis untuk memanfaatkan data TikTok sangat besar. Berikut use case yang paling sering saya temui:
| Use Case | Apa yang Diambil | Untuk Siapa |
|---|---|---|
| Riset Influencer & Marketing | Engagement rate, jumlah followers, format konten, performa hashtag | Tim marketing, agensi |
| Strategi Konten | Hashtag yang sedang tren, format video viral, frekuensi posting | Kreator konten, social media manager |
| Monitoring Brand | Penyebutan brand, jangkauan kampanye, sentimen audiens | Brand manager, tim PR |
| Intelijen Kompetitif | Performa video kompetitor, creative iklan, listing TikTok Shop | Tim e-commerce, product team |
| Riset Pasar | Tren baru, perilaku audiens, discovery produk | Analis, hedge fund, firma riset |
| Arsip & Kepatuhan | File video untuk review internal atau pencatatan | Legal, compliance, agensi |
Nilai komersialnya nyata: pendapatan iklan TikTok di AS diproyeksikan mencapai $23,4 miliar pada 2026, dan kreator afiliasi menghasilkan 82–84% pendapatan di kategori TikTok Shop teratas. Kalau kamu bergerak di e-commerce atau influencer marketing, data ini punya nilai finansial yang langsung terasa.
Kenapa Kode Python Dasar Gagal di TikTok
Kalau kamu sudah pernah mencoba sesuatu seperti ini dan mentok, kamu tidak sendirian:
import requests
from bs4 import BeautifulSoup
resp = requests.get("https://www.tiktok.com/@someuser")
soup = BeautifulSoup(resp.text, "html.parser")
# ...dan ternyata tidak ada data berguna di HTML
Masalahnya sederhana: TikTok adalah salah satu platform tersulit untuk di-scrape. requests.get() biasa hanya mengembalikan kerangka HTML yang hampir kosong karena konten aslinya dirender oleh JavaScript di browser. Selain itu, TikTok menerapkan lapisan anti-bot yang agresif, termasuk deteksi perilaku, TLS fingerprinting, virtual machine JavaScript kustom yang menghasilkan signature permintaan, serta selector CSS dinamis yang berubah tanpa pemberitahuan.

Menurut Imperva 2025 Bad Bot Report, trafik otomatis melampaui trafik manusia untuk pertama kalinya pada 2024 — bot sekarang menyumbang 51% dari seluruh trafik internet. TikTok sangat sadar akan hal ini dan membangun pertahanannya dengan serius.
Berikut tabel diagnostik cepat agar kamu bisa tahu apa yang salah dan langsung lompat ke metode yang tepat:
| Gejala | Penyebab Kemungkinan | Metode yang Memperbaiki |
|---|---|---|
| HTML kosong / tidak ada data | Konten dirender JS; requests tidak bisa menjalankan JavaScript | Metode 1 (JSON Tersembunyi) atau Metode 3 (Playwright) |
| 403 / Access Denied | Header tidak lengkap atau salah; terdeteksi anti-bot | Metode 1 dengan header yang benar |
| Berhasil sekali, lalu berhenti | Rate limiting / IP diblokir | Rotasi proxy (semua metode) |
| Muncul login wall | Perlu session/cookie | Metode 3 (browser dengan session tersimpan) |
| Kode dari ChatGPT tidak menghasilkan apa-apa | Struktur TikTok berubah sejak data pelatihan model | Ketiga metode (pendekatan terbaru) |
Ambang rate limit kira-kira 30–60 request per menit per IP sebelum mulai kena soft block atau CAPTCHA. IP data center biasanya terdeteksi dalam hitungan menit — proxy residential atau mobile pada praktiknya wajib kalau volume kamu cukup besar.
Gambaran Umum: 3 Metode untuk Scrape Video TikTok dengan Python
Berikut peta jalannya. Setiap metode punya trade-off berbeda, dan saya akan membahas ketiganya dengan kode yang bisa langsung dipakai:
- Ekstraksi JSON Tersembunyi — Parse tag script
__UNIVERSAL_DATA_FOR_REHYDRATION__yang tertanam di halaman TikTok. Paling cepat, paling sederhana, tanpa browser. - API Internal TikTok — Panggil endpoint tak terdokumentasi
/api/post/item_list/langsung untuk data massal dengan pagination berbasis cursor. - Otomatisasi Browser dengan Playwright — Render halaman di browser headless untuk menangani infinite scroll, konten dinamis, dan login wall.
Ketiga metode ini juga bisa dipakai untuk mengunduh file video .mp4 asli — saya bahas itu di bagian khusus setelah walkthrough metodenya. Tabel perbandingan lengkap ada di bagian akhir supaya kamu bisa mengambil keputusan dengan tepat.
Metode 1: Scrape Video TikTok Menggunakan JSON Tersembunyi (Ramah Pemula)
Ini pendekatan yang saya sarankan untuk memulai. TikTok menyisipkan blob JSON besar di dalam tag <script> dengan id __UNIVERSAL_DATA_FOR_REHYDRATION__ hampir di setiap pemuatan halaman. Blob ini berisi semua data profil dan video yang biasanya dirender oleh JavaScript front-end — artinya kamu bisa mengambilnya dengan satu request HTTP saja, tanpa browser.
Yang Anda Butuhkan
- Python 3.8+
requests(atauhttpx)beautifulsoup4(atauparsel)- Header yang tepat:
User-Agent,Referer,Accept-Language
Install dependensinya:
pip install requests beautifulsoup4
Langkah demi Langkah: Ekstrak Data Video TikTok dari Script Tag
Langkah 1: Kirim request GET dengan header browser yang realistis.
Di sinilah kebanyakan pemula gagal. Kalau kamu mengirim requests.get() polos tanpa header, TikTok akan mengembalikan 403 atau halaman CAPTCHA. Minimal kamu perlu User-Agent browser terbaru dan header Referer.
import requests
from bs4 import BeautifulSoup
import json
url = "https://www.tiktok.com/@charlidamelio"
headers = {
"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",
"Referer": "https://www.tiktok.com/",
"Accept-Language": "en-US,en;q=0.9",
}
resp = requests.get(url, headers=headers)
Langkah 2: Parse HTML dan temukan hydration script tag.
soup = BeautifulSoup(resp.text, "html.parser")
script_tag = soup.find("script", id="__UNIVERSAL_DATA_FOR_REHYDRATION__")
Kalau script_tag bernilai None, kemungkinan TikTok memblokir kamu (cek status code) atau ID tag-nya berubah (jarang, tapi bisa terjadi).
Langkah 3: Muat isi script sebagai JSON.
data = json.loads(script_tag.string)
Langkah 4: Navigasi struktur JSON untuk mengambil metadata video.
Strukturnya bersarang di bawah __DEFAULT_SCOPE__. Untuk halaman profil pengguna:
user_detail = data["__DEFAULT_SCOPE__"]["webapp.user-detail"]
user_info = user_detail["userInfo"]
# Statistik profil
stats = user_info["stats"]
print(f"Followers: {stats['followerCount']}, Likes: {stats['heartCount']}")
# Daftar video (halaman pertama)
item_list = user_detail.get("itemList", [])
for video in item_list:
print(video["desc"]) # Caption
print(video["stats"]["playCount"]) # Views
print(video["video"]["playAddr"]) # URL unduhan video (tanpa watermark)
print(video["video"]["downloadAddr"]) # URL unduhan video (dengan watermark)
Langkah 5: Ambil URL unduhan video.
Field playAddr biasanya memberikan versi video yang lebih bersih (sering kali tanpa watermark TikTok), sedangkan downloadAddr menyertakan watermark standar. Keduanya adalah URL langsung ke file .mp4 — tetapi untuk mengunduhnya tetap diperlukan header tertentu (dibahas di bagian download di bawah).
Sekarang kamu seharusnya sudah memiliki daftar objek metadata video, masing-masing berisi caption, statistik, waktu pembuatan, hashtag (di challenges[] dan textExtra), serta URL video langsung.
Keterbatasan Metode JSON Tersembunyi
- Hanya mengambil data dari pemuatan halaman awal — biasanya sekitar 30 video pertama di profil
- Tidak bisa menangani infinite scroll atau pagination (tidak ada "next page" untuk dipanggil)
- Jika TikTok mengubah ID script tag atau struktur JSON, parser akan rusak (ini terjadi berkala — Pydantic validation membantu menangkapnya lebih awal)
- Paling cocok untuk: scrape profil cepat, pengambilan data sekali jalan, atau saat kamu hanya butuh video terbaru
Metode 2: Scrape Video TikTok via API Internal
Front-end TikTok tidak memuat semua video sekaligus — ia melakukan panggilan XHR ke endpoint API internal saat kamu scroll. Endpoint utama untuk video pengguna adalah /api/post/item_list/. Kamu bisa memanggil endpoint ini langsung dari Python, sehingga kamu mendapatkan pagination berbasis cursor dan akses ke seluruh video di profil (bukan hanya halaman pertama).
Cara Menemukan Endpoint API Internal
Buka Chrome DevTools pada halaman profil TikTok, masuk ke tab Network, filter berdasarkan XHR, lalu scroll ke bawah. Kamu akan melihat request ke URL seperti:
https://www.tiktok.com/api/post/item_list/?WebIdLastTime=...&aid=1988&count=35&cursor=0&secUid=...
Parameter kuncinya adalah:
secUid— ID unik profil (kamu bisa mengambilnya dari JSON pada Metode 1, di bawahuserInfo.user.secUid)cursor— offset pagination (mulai dari0, tiap response memberi nilai cursor berikutnya)count— jumlah item per halaman (biasanya 30–35)
Langkah demi Langkah: Query API Internal TikTok dengan Python
Langkah 1: Dapatkan secUid untuk profil target.
Kamu bisa mengambilnya dari JSON tersembunyi (Metode 1) atau dari HTML halaman profil.
Langkah 2: Bangun dan kirim request API.
import requests
import json
sec_uid = "MS4wLjABAAAA..." # Dari Metode 1
api_url = "https://www.tiktok.com/api/post/item_list/"
params = {
"aid": "1988",
"secUid": sec_uid,
"count": 35,
"cursor": 0,
}
headers = {
"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",
"Referer": "https://www.tiktok.com/",
}
resp = requests.get(api_url, params=params, headers=headers)
data = resp.json()
Langkah 3: Parse respons.
Setiap item di data["itemList"] berisi struktur video yang sama seperti Metode 1 — desc, stats, video.playAddr, video.downloadAddr, dan seterusnya.
Langkah 4: Lakukan pagination untuk semua video.
all_videos = []
cursor = 0
has_more = True
while has_more:
params["cursor"] = cursor
resp = requests.get(api_url, params=params, headers=headers)
data = resp.json()
items = data.get("itemList", [])
all_videos.extend(items)
has_more = data.get("hasMore", False)
cursor = data.get("cursor", 0)
print(f"Fetched {len(items)} videos, total: {len(all_videos)}, hasMore: {has_more}")
print(f"Total videos scraped: {len(all_videos)}")
Setiap iterasi mengembalikan batch berikutnya dan cursor baru. Loop berlanjut sampai hasMore bernilai False.
Keterbatasan Metode API Internal
- TikTok sering mengubah endpoint dan parameter yang dibutuhkan — ini adalah metode dengan maintenance paling tinggi. Dalam beberapa bulan terakhir, sebagian request mulai membutuhkan
msToken,X-Bogus, atau parameter signature lain yang dihasilkan oleh virtual machine JavaScript kustom TikTok (spoiler: mereplikasi ini murni dengan Python tidak sederhana). - Untuk jenis data tertentu mungkin memerlukan cookie sesi atau token tambahan
- Rate limiting berbasis IP tetap berlaku — rotasi proxy sangat disarankan
- Jika kamu mulai mendapat array
itemListkosong, kemungkinanmsTokenkamu sudah kedaluwarsa (biasanya berotasi setiap sekitar 10 detik di browser) - Paling cocok untuk: ekstraksi data massal saat kamu membutuhkan semua video dari profil dan batasan halaman pertama pada Metode 1 tidak cukup
Metode 3: Scrape Video TikTok dengan Playwright (Otomatisasi Browser)
Saat dua metode pertama mentok — karena login required, CAPTCHA, atau parameter signature yang tidak bisa kamu tiru — Playwright jadi jalan keluarnya. Tools ini membuka browser sungguhan (headless), menavigasi TikTok seperti pengguna manusia, dan bisa menangani rendering JavaScript, infinite scroll, bahkan sesi yang sudah terautentikasi.
Menyiapkan Playwright untuk Scraping TikTok
Install Playwright dan binary browser-nya:
pip install playwright
playwright install firefox
Saya merekomendasikan Firefox dibanding Chromium untuk scraping TikTok. Pengujian komunitas secara konsisten menunjukkan kompatibilitas fingerprint yang lebih baik pada Firefox, dan deteksi bot TikTok sangat agresif terhadap browser headless berbasis Chromium.
Untuk stealth tambahan, pertimbangkan menggabungkan Playwright dengan patchright (fork Playwright yang dipatch) atau Camoufox (Firefox yang dimodifikasi di level C++ untuk anti-detection). Dalam benchmark independen, Camoufox meraih skor stealth yang nyaris sempurna terhadap layanan deteksi bot utama.
Langkah demi Langkah: Scrape Video Profil TikTok dengan Playwright
Langkah 1: Jalankan browser Firefox headless dan buka profil.
import asyncio
from playwright.async_api import async_playwright
import json
async def scrape_tiktok_profile(username):
async with async_playwright() as p:
browser = await p.firefox.launch(headless=True)
context = await browser.new_context(
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0",
viewport={"width": 1280, "height": 720},
)
page = await context.new_page()
await page.goto(f"https://www.tiktok.com/@{username}", wait_until="networkidle")
Langkah 2: Tunggu grid video selesai dimuat.
# Tunggu item video muncul
await page.wait_for_selector('[data-e2e="user-post-item"]', timeout=15000)
Kalau TikTok menampilkan overlay "Something went wrong", kamu mungkin perlu mengklik tombol retry:
retry_btn = page.locator('button:has-text("Retry")')
if await retry_btn.count() > 0:
await retry_btn.click()
await page.wait_for_selector('[data-e2e="user-post-item"]', timeout=15000)
Langkah 3: Ambil data dari JSON tersembunyi (bahkan saat memakai Playwright).
Pendekatan yang paling andal tetap mengambil hydration JSON, meskipun sedang memakai browser:
script_el = page.locator("#__UNIVERSAL_DATA_FOR_REHYDRATION__")
raw_json = await script_el.inner_text()
data = json.loads(raw_json)
# Navigasi JSON yang sama seperti Metode 1
user_detail = data["__DEFAULT_SCOPE__"]["webapp.user-detail"]
videos = user_detail.get("itemList", [])
Langkah 4: Tangani infinite scroll untuk video tambahan.
Kalau kamu butuh lebih dari sekitar 30 video awal, scroll ke bawah dan tangkap respons XHR tambahan:
all_videos = list(videos)
# Intercept respons API saat scrolling
api_responses = []
async def capture_response(response):
if "/api/post/item_list" in response.url:
try:
body = await response.json()
api_responses.append(body)
except:
pass
page.on("response", capture_response)
# Scroll ke bawah untuk memicu pemuatan tambahan
for _ in range(5): # Sesuaikan jumlah scroll jika perlu
await page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
await asyncio.sleep(2)
# Kumpulkan video dari respons yang berhasil diintersep
for api_resp in api_responses:
items = api_resp.get("itemList", [])
all_videos.extend(items)
print(f"Total videos: {len(all_videos)}")
await browser.close()
return all_videos
# Jalankan
videos = asyncio.run(scrape_tiktok_profile("charlidamelio"))
Sekarang kamu seharusnya punya daftar objek video dari pemuatan halaman awal dan halaman tambahan yang dimuat lewat scroll.
Keterbatasan Metode Playwright
- Paling lambat sejauh ini (render penuh, round-trip jaringan, jeda scroll)
- Konsumsi resource lebih tinggi — setiap instance browser memakai memori dan CPU yang signifikan
- Tetap rentan terhadap blocking berbasis IP dalam skala besar — padukan dengan rotasi proxy
- Paling cocok untuk: interaksi kompleks, konten di balik login wall, menangani CAPTCHA, atau saat Metode 1 dan 2 diblokir
Cara Mengunduh Video TikTok (.mp4) dengan Python
Ini bagian yang mengisi celah terbesar dari hampir semua tutorial scraping TikTok lainnya. Mengambil metadata memang berguna, tapi kebanyakan orang yang mencari "scrape TikTok videos" sebenarnya menginginkan file videonya.
TikTok menyematkan URL unduhan di objek data video:
playAddr— biasanya versi tanpa watermark atau watermark lebih ringandownloadAddr— versi yang memang ditujukan TikTok untuk unduhan in-app (mencakup watermark TikTok)
Kedua URL ini bersifat sementara dan akan kedaluwarsa setelah jendela waktu singkat (biasanya beberapa jam), jadi kamu perlu mengunduhnya segera setelah diekstrak.
Langkah demi Langkah: Mengunduh File Video TikTok
Langkah 1: Ambil URL video dari salah satu dari tiga metode di atas.
video_url = video["video"]["playAddr"] # Versi tanpa watermark
# atau
video_url = video["video"]["downloadAddr"] # Dengan watermark
Langkah 2: Kirim request GET dengan header yang tepat.
Inilah langkah yang sering menjebak orang. Kalau kamu langsung requests.get(video_url), hasilnya biasanya 403. TikTok memeriksa header Referer dan mengharapkan User-Agent yang menyerupai browser.
import requests
headers = {
"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",
"Referer": "https://www.tiktok.com/",
}
resp = requests.get(video_url, headers=headers, stream=True)
Langkah 3: Tulis isi respons ke file .mp4.
Gunakan stream=True dan tulis per potongan — video TikTok bisa berukuran besar, dan kamu tidak ingin memuat seluruh file ke memori:
video_id = video["id"]
filename = f"tiktok_{video_id}.mp4"
with open(filename, "wb") as f:
for chunk in resp.iter_content(chunk_size=1024 * 1024): # potongan 1MB
if chunk:
f.write(chunk)
print(f"Downloaded: {filename}")
Sekarang kamu seharusnya memiliki file .mp4 yang bisa diputar di perangkat lokal.
Download dengan Watermark vs Tanpa Watermark
TikTok menyimpan versi video dengan watermark dan tanpa watermark. URL playAddr sering kali memberikan versi yang lebih bersih (yang digunakan player), sedangkan downloadAddr mencakup watermark TikTok dengan username kreator.
Catatan singkat soal etika: watermark ada untuk memberi kredit kepada kreator. Kalau kamu mengunduh video untuk riset, analisis, atau review internal, menggunakan playAddr umumnya tidak masalah. Namun jika kamu mendistribusikan ulang atau memposting ulang kontennya, menghapus atribusi kreator bisa memunculkan persoalan etika sekaligus hak cipta. Lebih lanjut soal ini ada di bagian legal di bawah.
Untuk pipeline unduhan yang lebih tangguh, pertimbangkan yt-dlp — extractor TikTok-nya menangani perhitungan signature dan resolusi URL secara otomatis, jadi kamu tidak perlu mengelola header dan kedaluwarsa token sendiri.
Perbandingan Berdampingan: Metode Python Mana yang Sebaiknya Dipakai?
Berikut tabel perbandingan yang saya harap sudah ada saat pertama kali saya mengerjakan proyek scraping TikTok:
| Kriteria | Metode 1: JSON Tersembunyi | Metode 2: API Internal | Metode 3: Playwright |
|---|---|---|---|
| Tingkat kesulitan | Pemula | Menengah | Menengah |
| Kecepatan | Cepat (1 request per halaman) | Cepat (JSON API) | Lambat (render penuh) |
| Ketahanan terhadap anti-bot | Sedang | Rendah (endpoint sering berubah) | Tinggi (meniru browser asli) |
| Bisa download .mp4? | Ya (ekstrak playAddr) | Ya (URL di respons) | Ya (intercept network) |
| Menangani infinite scroll | Tidak (hanya halaman pertama) | Ya (pagination cursor) | Ya (simulasi scroll) |
| Butuh proxy dalam skala besar | Ya | Ya | Ya |
| Perawatan yang dibutuhkan | Sedang (struktur JSON berubah) | Tinggi (endpoint/signature sering berubah) | Rendah-Sedang (browser lebih adaptif) |
| Paling cocok untuk | Scrape cepat satu kali pada profil | Ekstraksi data massal, semua video | Konten yang dibatasi login atau kompleks |
Rekomendasi saya:
- Cuma butuh snapshot cepat dari satu profil? Mulai dari Metode 1. Setup-nya sekitar 30 detik dan hasil data keluar kurang dari satu detik per halaman.
- Butuh semua video dari satu profil dengan pagination? Metode 2 adalah pilihan yang tepat, tapi siap-siap menghadapi maintenance saat TikTok mengubah parameter API-nya.
- Berurusan dengan login wall, CAPTCHA, atau butuh ketahanan maksimum? Metode 3 dengan Playwright. Lebih lambat dan lebih berat, tetapi paling sulit diblokir oleh TikTok.
Dalam praktiknya, saya sering mulai dari Metode 1 dan hanya naik ke Metode 2 atau 3 ketika mentok. Itu menjaga infrastruktur tetap sederhana dan biaya tetap rendah.
Tidak Butuh Python? Scrape Video TikTok dengan Tools Tanpa Kode
Banyak orang yang mencari "scrape TikTok videos with Python" sebenarnya tidak butuh Python. Yang mereka butuhkan adalah datanya. Kalau kamu seorang marketing analyst yang ingin metadata video dari beberapa profil kompetitor, atau brand manager yang memantau penyebutan brand, menyiapkan environment Python dengan rotasi proxy dan penanganan signature jelas terlalu berlebihan.

Berikut perbandingan pendekatan yang jujur:
| Pendekatan | Tingkat Skill | Biaya | Maintenance | Paling Cocok Untuk |
|---|---|---|---|---|
| Python (DIY) | Menengah+ | Gratis (+ biaya proxy) | Tinggi (script bisa rusak) | Kontrol penuh, pipeline kustom |
| Thunderbit (ekstensi Chrome) | Pemula | Ada paket gratis | Tidak ada (AI membaca situs dari awal setiap kali) | Ekstraksi data video cepat, ekspor ke Sheets/Excel |
| Apify TikTok Scraper | Pemula | Berbayar (per run) | Rendah (dipelihara Apify) | Run otomatis massal terjadwal |
| TikAPI | Developer | Langganan berbayar | Sedang | Membangun aplikasi di atas data TikTok |
Cara Thunderbit Menangani Scraping TikTok
Thunderbit adalah AI web scraper yang kami bangun di Thunderbit, dan cara kerjanya berbeda dari tools scraping tradisional. Alih-alih bergantung pada selector CSS atau aturan XPath yang sudah dipasang sebelumnya (yang mudah rusak setiap kali TikTok mengubah layout), AI Thunderbit membaca struktur halaman dari awal setiap kali dan menyarankan kolom yang relevan — caption, likes, hashtag, URL video, author, dan sebagainya.
Workflow-nya benar-benar hanya dua klik:
- Buka profil TikTok di Chrome, klik ekstensi Thunderbit, lalu tekan "AI Suggest Fields." Thunderbit memindai halaman dan mengusulkan struktur tabel.
- Tinjau kolom yang disarankan, sesuaikan jika perlu, lalu klik "Scrape."
Datanya langsung diekspor ke Google Sheets, Excel, Airtable, atau Notion. Tanpa selector CSS yang harus dipelihara, tanpa kode yang perlu di-debug, tanpa konfigurasi proxy. Untuk marketing analyst yang butuh metadata video dari beberapa profil, ini jauh lebih cepat dibanding menyiapkan environment Python — dan tidak mudah rusak saat TikTok memperbarui front-end-nya (yang, berdasarkan laporan komunitas, terjadi setiap beberapa minggu).
Thunderbit juga mendukung subpage scraping — ia bisa membuka tiap halaman video individual untuk memperkaya tabel data kamu dengan detail tambahan seperti jumlah komentar lengkap, info musik, atau durasi video.
Kamu bisa mencobanya gratis lewat Thunderbit Chrome Extension. Untuk penjelasan lebih lanjut, cek channel YouTube kami.
Batasan Legal dan Etis Saat Scraping TikTok
Tidak ada satu pun dari tutorial teratas di topik ini yang membahas legalitas, padahal itu cukup penting mengingat TikTok secara aktif pernah menempuh jalur hukum terhadap layanan scraping. Berikut hal-hal yang perlu kamu ketahui.
Ketentuan Layanan TikTok (§ 4.1) secara eksplisit melarang akses otomatis. Melanggar TOS adalah pelanggaran kontrak, bukan tindak pidana — tetapi bisa berujung pada akun diblokir, IP diblokir, atau tindakan perdata.
Lanskap hukumnya lebih permisif daripada yang banyak orang kira untuk data publik. Preseden utamanya adalah Meta Platforms v. Bright Data (N.D. Cal., Jan 2024), di mana pengadilan memutuskan bahwa scraping data publik saat logout tidak melanggar Terms of Service Meta. Meta kemudian mencabut kasusnya dan melepaskan hak banding. Putusan hiQ v. LinkedIn di Ninth Circuit sebelumnya (ditegaskan kembali setelah Van Buren) menetapkan bahwa scraping data publik tidak melanggar CFAA — meski hiQ akhirnya menyelesaikan perkara, membayar $500K, dan menyetujui injunction permanen, yang menunjukkan bahwa penegakan TOS tetap bisa berdampak.
GDPR dan CCPA berlaku jika kamu mengumpulkan data pribadi dari pengguna EU atau California. Scraping posting publik satu hal; membangun database berisi informasi pribadi pengguna individual adalah hal lain.
Panduan praktis:
- Batasi laju request kamu (jangan membombardir server TikTok)
- Jangan scrape akun privat atau konten dari anak di bawah umur
- Jangan mendistribusikan ulang konten video berhak cipta untuk tujuan komersial
- Hormati
robots.txt(TikTok melarang sebagian besar crawling otomatis) - Mengunduh video untuk riset atau analisis pribadi berbeda dengan memposting ulang — pahami perbedaannya
Disclaimer: Ini adalah konten edukatif, bukan nasihat hukum. Jika kamu membangun produk komersial berdasarkan data TikTok hasil scraping, konsultasikan dengan pengacara.
Penutup: Poin-Poin Penting
Scraping TikTok di 2025 adalah target yang terus bergerak. Lapisan anti-bot platform ini termasuk yang paling canggih di web, dan pendekatan naif (plain requests, snippet dari ChatGPT, tutorial lama) akan gagal. Namun dengan metode yang tepat, ini sepenuhnya bisa dilakukan.
Hal yang perlu kamu ingat:
- Metode 1 (JSON Tersembunyi) adalah yang paling cepat dan sederhana — mulai dari sini untuk scrape profil cepat.
- Metode 2 (API Internal) memberi pagination dan akses massal, tetapi paling membutuhkan maintenance karena endpoint dan persyaratan signature sering berubah.
- Metode 3 (Playwright) paling tahan terhadap anti-bot, dengan konsekuensi kecepatan dan konsumsi resource.
- Ketiga metode bisa mengekstrak URL download video — dan panduan ini adalah satu-satunya yang menunjukkan cara benar-benar mengunduh file .mp4 dengan header yang tepat.
- Untuk pengguna non-teknis, Thunderbit menawarkan cara yang jauh lebih cepat untuk mendapatkan data yang sama tanpa menulis atau merawat kode. Pendekatan berbasis AI-nya berarti ia tidak mudah rusak saat TikTok mengubah layout — yang, berdasarkan laporan komunitas, terjadi lebih sering daripada yang diinginkan siapa pun.
Kalau kamu ingin mulai tanpa setup Python, coba Thunderbit Chrome Extension — paket gratisnya cukup untuk menguji beberapa profil dan melihat apakah sesuai dengan alur kerja kamu. Bagi yang memilih jalur Python, mulai dari Metode 1, validasi data kamu, lalu scale up dari sana.
Ingin mendalami teknik web scraping? Lihat panduan kami tentang cara scraping data dari website apa pun, best practice web scraping, dan scraping ke Google Sheets.
FAQ
Apakah legal scrape video TikTok dengan Python?
Scraping data publik berada di area abu-abu secara hukum, bukan pelanggaran yang hitam-putih. Putusan Meta v. Bright Data (2024) mendukung pandangan bahwa scraping data publik saat logout tidak melanggar Terms of Service platform. Namun, TOS TikTok secara eksplisit melarang akses otomatis, dan kewajiban GDPR/CCPA berlaku untuk data pribadi. Ini tidak ilegal dalam arti yang sering ditakuti orang, tetapi juga bukan tanpa risiko. Konsultasikan dengan ahli hukum untuk kasus spesifik kamu.
Library Python apa yang terbaik untuk scraping TikTok?
Tergantung pendekatannya. Untuk ekstraksi JSON tersembunyi (Metode 1), requests + beautifulsoup4 sudah cukup. Untuk panggilan API internal (Metode 2), requests atau httpx bisa dipakai. Untuk otomatisasi browser (Metode 3), playwright adalah standar saat ini — adopsinya telah melampaui Selenium untuk proyek scraping baru, dengan sekitar 59 juta unduhan PyPI per bulan dibanding sekitar 53 juta milik Selenium. Wrapper TikTok-Api (sekitar 6,3 ribu bintang GitHub) juga layak dipertimbangkan kalau kamu ingin antarmuka tingkat lebih tinggi, meski bisa rapuh.
Bisakah saya mengunduh video TikTok tanpa watermark menggunakan Python?
Bisa. Data TikTok sendiri menyertakan URL playAddr yang biasanya memberi versi video tanpa overlay watermark standar. Panduan ini menunjukkan cara mengambil URL tersebut dari salah satu dari tiga metode dan mengunduh file .mp4 dengan header yang tepat. Sebaliknya, field downloadAddr menyertakan watermark.
Kenapa scraper TikTok saya mengembalikan data kosong?
Penyebab paling umum adalah TikTok membutuhkan JavaScript untuk merender konten. requests.get() biasa hanya mengambil HTML kerangka — data aslinya entah berada di script tag JSON tersembunyi (Metode 1) atau dimuat secara dinamis lewat JavaScript (Metode 3). Kalau HTML kosong, coba Metode 1 dulu. Kalau tetap gagal, periksa header kamu (kekurangan Referer adalah penyebab #1 error 403) atau naikkan ke Metode 3 dengan Playwright.
Bagaimana cara menghindari pemblokiran saat scraping TikTok?
Gunakan header browser yang realistis (termasuk User-Agent, Referer, dan Accept-Language), rotasikan proxy residential atau mobile (IP data center terdeteksi dalam hitungan menit), tambahkan jeda acak antar request (minimal 1–3 detik), dan jangan scraping dengan volume sangat tinggi. Metode 3 (Playwright) menawarkan ketahanan tertinggi karena meniru sesi browser nyata. Untuk volume yang serius, siapkan anggaran biaya proxy — proxy residential level awal biasanya sekitar $2–4 per GB dari penyedia besar.
- Pelajari Lebih Lanjut


