TikTok’un aylık aktif kullanıcı sayısı artık yaklaşık ve içerik üreticileri her gün tahmini 23 milyon video yüklüyor. Bu veri selinin sadece küçük bir kısmını bile toplamaya çalıştıysan, bunun ne kadar uğraştırıcı olduğunu zaten bilirsin.
Genelde süreç şöyle ilerler: “Python ile TikTok videoları çekme” diye ararsın, bir eğitimden bir kod parçası kopyalarsın (ya da ChatGPT’ye yazdırırsın), çalıştırırsın ve karşına… hiçbir şey çıkmaz. Boş HTML. 403 hatası. Ya da o meşhur “Process finished with exit code 0” mesajı ama ortada tek satır çıktı yok. Aynı döngünün onlarca GitHub sorusunda ve Reddit başlığında tekrarlandığını gördüm; bu rehberi yazmamın nedeni de tam olarak bu. Bu yazıda, 2025’te gerçekten çalışan üç Python yöntemini ele alacağız, asıl .mp4 video dosyalarını indirmeye dair uçtan uca bir anlatım sunacağız (yani diğer tüm rehberlerin durduğu noktadan da öteye geçeceğiz) ve kullanım senaryona en uygun yöntemi seçebilmen için bir karşılaştırma tablosu ekleyeceğiz. Python kullanmana hiç gerek yoksa, gibi kodsuz alternatifleri de anlatacağım; bunlar aynı veriye neredeyse iki tıkta ulaşmanı sağlar.
"TikTok videolarını çekmek" tam olarak ne demek?
Koda geçmeden önce, insanların “TikTok videolarını çekmek” derken neyi kastettiğini netleştirelim; çünkü bu ifade aslında iki çok farklı şeyi kapsıyor:
- Video metadatasını çıkarmak: Açıklamalar, hashtag’ler, beğeni sayısı, yorum sayısı, paylaşım sayısı, görüntülenme sayısı, paylaşım tarihleri, yazar bilgileri. Eğitimlerin çoğu buna odaklanır.
- Gerçek video dosyalarını (.mp4) indirmek: Videonun kendisini cihazına kaydetmek. Çoğu kişi “TikTok videolarını çekmek” yazdığında aslında bunu ister — fakat neredeyse hiçbir rehber bu kısmı anlatmaz.
Bu rehber ikisini de kapsıyor. Aşağıdaki her yöntem hem metadata çıkarabilir hem de .mp4 dosyalarını kaydetmek için gereken indirme bağlantılarını verir.
Neden TikTok videolarını Python ile çekmelisin?
ve TikTok Shop’un gelir ürettiği düşünüldüğünde, TikTok verilerine erişmenin iş değeri oldukça büyük. En sık gördüğüm kullanım alanları şunlar:
| Kullanım Alanı | Çekilen Veri | Kimler İçin | |---|---|---| | Influencer ve Pazarlama Araştırması | Etkileşim oranları, takipçi sayıları, içerik formatları, hashtag performansı | Pazarlama ekipleri, ajanslar | | İçerik Stratejisi | Trend hashtag’ler, viral video formatları, paylaşım sıklığı | İçerik üreticileri, sosyal medya yöneticileri | | Marka Takibi | Bahsetmeler, kampanya erişimi, kitle duyarlılığı | Marka yöneticileri, PR ekipleri | | Rekabet Analizi | Rakip video performansı, reklam kreatifleri, TikTok Shop listeleri | E-ticaret, ürün ekipleri | | Pazar Araştırması | Yükselen trendler, kullanıcı davranışları, ürün keşfi | Analistler, hedge fonları, araştırma şirketleri | | Arşivleme ve Uyum | İç inceleme veya kayıt tutma için video dosyaları | Hukuk, uyum ekipleri, ajanslar |
Ticari etkisi de gerçek: ABD’de TikTok reklam gelirinin 2026’da 23,4 milyar dolara ulaşması bekleniyor ve affiliate içerik üreticileri TikTok Shop’un en popüler kategorilerinde gelirin oluşturuyor. E-ticaret ya da influencer pazarlamasıyla uğraşıyorsan, bu verinin doğrudan parasal karşılığı var.
Temel Python kodun TikTok’ta neden çalışmaz?
Buna benzer bir şey denediysen ve bir yere varamadıysan, yalnız değilsin:
1import requests
2from bs4 import BeautifulSoup
3resp = requests.get("https://www.tiktok.com/@someuser")
4soup = BeautifulSoup(resp.text, "html.parser")
5# ...ve sonra HTML içinde işe yarar hiçbir şey yok
Sebep oldukça basit: TikTok, kazınması en zor platformlardan biri. Sade bir requests.get() çağrısı çoğunlukla boş bir HTML iskeleti döndürür; çünkü gerçek içerik tarayıcıda JavaScript tarafından oluşturulur. Üstelik TikTok; davranış analizi, TLS parmak izi kontrolü, istek imzası üreten ve haber verilmeden değişen dinamik CSS seçiciler içeren agresif bir bot karşıtı sistem kullanır.

Imperva 2025 Bad Bot Report’a göre, 2024’te ilk kez otomatik trafik insan trafiğini geçti — botlar artık tüm internet trafiğinin oluşturuyor. TikTok bunun farkında ve savunmasını buna göre kurmuş durumda.
Nerede takıldığını anlaman ve doğru yönteme geçmen için hızlı bir teşhis tablosu:
| Belirti | Muhtemel Neden | Çözüm Olan Yöntem |
|---|---|---|
| Boş HTML / veri yok | JS ile render edilen içerik; requests JavaScript çalıştıramaz | Yöntem 1 (Gizli JSON) veya Yöntem 3 (Playwright) |
| 403 / Erişim Reddedildi | Eksik ya da yanlış header’lar; bot algılama | Doğru header’larla Yöntem 1 |
| Bir kez çalışıp sonra duruyor | Rate limit / IP engeli | Proxy rotasyonu (tüm yöntemler) |
| Giriş duvarı çıkıyor | Oturum/çerez gereksinimi | Yöntem 3 (kayıtlı oturumlu tarayıcı) |
| ChatGPT’nin ürettiği kod hiçbir şey döndürmüyor | TikTok yapısı model eğitiminden sonra değişti | Üç yöntemin tamamı (güncel yaklaşımlar) |
Rate limit eşiği, yumuşak engeller veya CAPTCHA’lar görülmeden önce IP başına dakikada yaklaşık 30–60 istek civarında. Veri merkezi IP’leri dakikalar içinde işaretleniyor; herhangi bir hacim için residential ya da mobil proxy neredeyse zorunlu.
Genel bakış: TikTok videolarını Python ile çekmenin 3 yöntemi
İşte yol haritası. Her yöntemin farklı artı ve eksileri var; üçünü de çalışan kodlarla anlatacağım:
- Gizli JSON çıkarma — TikTok sayfalarına gömülü
__UNIVERSAL_DATA_FOR_REHYDRATION__script etiketini ayrıştırır. En hızlısı, en kolayı, tarayıcı gerektirmez. - TikTok’un dahili API’si — Belgesiz
/api/post/item_list/uç noktasını doğrudan çağırarak cursor tabanlı sayfalama ile toplu veri alır. - Playwright ile tarayıcı otomasyonu — Sonsuz kaydırma, dinamik içerik ve giriş duvarlarını ele almak için sayfayı headless tarayıcıda render eder.
Bu üç yöntemle gerçek .mp4 video dosyalarını indirmek de mümkün — bunun ayrıntısını yöntem anlatımlarından sonra ayrı bir bölümde veriyorum. Sonunda yer alan tam karşılaştırma tablosu sayesinde bilinçli seçim yapabileceksin.
Yöntem 1: Gizli JSON kullanarak TikTok videolarını çekme (başlangıç dostu)
Başlamak için önerdiğim yöntem budur. TikTok neredeyse her sayfa yüklemesinde, __UNIVERSAL_DATA_FOR_REHYDRATION__ id’sine sahip bir <script> etiketi içinde devasa bir JSON bloğu gömer. Bu blok, ön yüz JavaScript’inin normalde oluşturacağı tüm profil ve video verilerini içerir — yani tek bir HTTP isteğiyle, tarayıcıya ihtiyaç duymadan bu veriyi alabilirsin.
Gerekenler
- Python 3.8+
requests(veyahttpx)beautifulsoup4(veyaparsel)- Doğru header’lar:
User-Agent,Referer,Accept-Language
Bağımlılıkları kur:
1pip install requests beautifulsoup4
Adım adım: Script etiketinden TikTok video verisini çıkarma
Adım 1: Gerçekçi tarayıcı header’larıyla bir GET isteği gönderin.
Acemilerin en sık takıldığı nokta burasıdır. Header olmadan düz bir requests.get() gönderirsen TikTok sana 403 veya CAPTCHA sayfası döndürür. En azından güncel bir tarayıcı User-Agent değeri ve Referer header’ı gerekir.
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)
Adım 2: HTML’yi ayrıştırın ve hydration script etiketini bulun.
1soup = BeautifulSoup(resp.text, "html.parser")
2script_tag = soup.find("script", id="__UNIVERSAL_DATA_FOR_REHYDRATION__")
Eğer script_tag None ise, TikTok seni engellemiştir (durum kodunu kontrol et) ya da etiket ID’sini değiştirmiştir (nadir ama mümkün).
Adım 3: Script içeriğini JSON olarak yükleyin.
1data = json.loads(script_tag.string)
Adım 4: Video metadatasını çıkarmak için JSON yapısında ilerleyin.
Yapı __DEFAULT_SCOPE__ altında iç içe geçer. Bir kullanıcı profil sayfası için:
1user_detail = data["__DEFAULT_SCOPE__"]["webapp.user-detail"]
2user_info = user_detail["userInfo"]
3# Profil istatistikleri
4stats = user_info["stats"]
5print(f"Takipçi: {stats['followerCount']}, Beğeni: {stats['heartCount']}")
6# Video listesi (ilk sayfadaki videolar)
7item_list = user_detail.get("itemList", [])
8for video in item_list:
9 print(video["desc"]) # Açıklama
10 print(video["stats"]["playCount"]) # Görüntülenme sayısı
11 print(video["video"]["playAddr"]) # Video indirme bağlantısı (filigransız)
12 print(video["video"]["downloadAddr"]) # Video indirme bağlantısı (filigranlı)
Adım 5: Video indirme bağlantılarını çıkarın.
playAddr alanı genellikle videonun daha temiz bir sürümünü sağlar (çoğu zaman TikTok filigranı olmadan), downloadAddr ise standart filigranla birlikte gelir. İkisi de doğrudan .mp4 dosyasına giden URL’lerdir — ancak indirmek için belirli header’lar gerekir (aşağıdaki indirme bölümünde anlatılıyor).
Artık her biri açıklama, istatistikler, oluşturulma zamanı, hashtag’ler (challenges[] ve textExtra içinde) ve doğrudan video URL’leri içeren video nesneleri listesine sahip olmalısın.
Gizli JSON yönteminin sınırlamaları
- Sadece ilk sayfa yüklemesindeki veriyi yakalar — genelde bir profildeki ilk ~30 video
- Sonsuz kaydırma veya sayfalama işlemlerini yönetemez (istenebilecek bir “sonraki sayfa” yoktur)
- TikTok script etiketi ID’sini veya JSON yapısını değiştirirse ayrıştırıcı bozulur (bu zaman zaman olur — bunu erken yakalamaya yardımcı olur)
- En uygun kullanım: hızlı profil çekimleri, tek seferlik veri alma, ya da yalnızca en güncel videolara ihtiyaç duyduğun durumlar
Yöntem 2: Dahili API üzerinden TikTok videolarını çekme
TikTok’un ön yüzü tüm videoları bir anda yüklemez — kaydırdıkça dahili API uç noktalarına XHR çağrıları yapar. Kullanıcı videoları için ana uç nokta /api/post/item_list/’tir. Bu uç noktayı doğrudan Python’dan çağırabilirsin; böylece cursor tabanlı sayfalama elde eder ve bir profildeki tüm videolara erişirsin (ilk sayfayla sınırlı kalmazsın).
Dahili API uç noktası nasıl bulunur?
Bir TikTok profil sayfasında Chrome DevTools’u aç, Network sekmesine gir, XHR ile filtrele ve aşağı doğru kaydır. Şuna benzer URL’lere yapılan istekleri göreceksin:
1https://www.tiktok.com/api/post/item_list/?WebIdLastTime=...&aid=1988&count=35&cursor=0&secUid=...
Temel parametreler şunlardır:
secUid— profilin benzersiz kimliği (Bunu Yöntem 1’deki JSON içinde,userInfo.user.secUidaltında bulabilirsiniz)cursor— sayfalama ofseti (0’dan başlar, her yanıt bir sonraki cursor değerini döndürür)count— sayfa başına öğe sayısı (genellikle 30–35)
Adım adım: TikTok’un dahili API’sini Python ile sorgulama
Adım 1: Hedef profil için secUid alın.
Bunu gizli JSON’dan (Yöntem 1) ya da profil sayfasının HTML’inden çekebilirsiniz.
Adım 2: API isteğini oluşturun ve gönderin.
1import requests
2import json
3sec_uid = "MS4wLjABAAAA..." # Yöntem 1'den
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()
Adım 3: Yanıtı ayrıştırın.
data["itemList"] içindeki her öğe, Yöntem 1 ile aynı video yapısını içerir — desc, stats, video.playAddr, video.downloadAddr vb.
Adım 4: Tüm videoları sayfalayarak çekin.
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"{len(items)} video çekildi, toplam: {len(all_videos)}, hasMore: {has_more}")
13print(f"Toplam çekilen video sayısı: {len(all_videos)}")
Her iterasyon bir sonraki grubu ve yeni bir cursor değerini döndürür. Döngü, hasMore False olana kadar devam eder.
Dahili API yönteminin sınırlamaları
- TikTok bu uç noktaları ve gerekli parametreleri sık sık değiştirir — bakım gereksinimi en yüksek yöntem budur. Son aylarda bazı istekler
msToken,X-Bogusveya TikTok’un tarafından üretilen başka imza parametreleri istemeye başladı (spoiler: bunu saf Python ile birebir taklit etmek hiç kolay değil). - Bazı veri türleri için oturum çerezleri veya ek token’lar gerekebilir
- IP tabanlı rate limit yine geçerlidir — proxy rotasyonu önerilir
- Boş
itemListdizileri görmeye başlarsan,msToken’ın büyük olasılıkla eski kalmıştır (tarayıcıda yaklaşık her 10 saniyede bir yenilenir) - En uygun kullanım: bir profildeki tüm videoları alman gereken toplu veri çekimleri; Yöntem 1’in sadece ilk sayfa sınırlaması yeterli olmadığında
Yöntem 3: Playwright ile TikTok videolarını çekme (tarayıcı otomasyonu)
İlk iki yöntem duvara toslarsa — giriş gereksinimleri, CAPTCHA’lar ya da kopyalayamadığın imza parametreleri nedeniyle — çözümün Playwright olur. Gerçek bir (headless) tarayıcı açar, TikTok’u insan kullanıcı gibi gezinir ve JavaScript render’ı, sonsuz kaydırma ve hatta oturum açılmış hesapları yönetebilir.
TikTok çekimi için Playwright kurulumu
Playwright ve tarayıcı ikililerini kur:
1pip install playwright
2playwright install firefox
TikTok çekimi için Chromium yerine Firefox öneririm. Topluluk testleri, Firefox’ta sürekli olarak gösteriyor ve TikTok’un bot algılama sistemi özellikle Chromium tabanlı headless tarayıcılara karşı daha agresif.
Ek gizlilik için Playwright’i (yamalanmış bir Playwright çatısı) veya (Firefox’un anti-detection için C++ seviyesinde değiştirilmiş sürümü) ile birlikte kullanmayı düşünebilirsin. Camoufox, büyük bot algılama servislerine karşı neredeyse kusursuz gizlilik puanlarına ulaşıyor.
Adım adım: Playwright ile TikTok profil videolarını çekme
Adım 1: Headless Firefox tarayıcısı başlatın ve profile gidin.
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")
Adım 2: Video ızgarasının yüklenmesini bekleyin.
1 # Video öğelerinin görünmesini bekle
2 await page.wait_for_selector('[data-e2e="user-post-item"]', timeout=15000)
TikTok “Bir şeyler ters gitti” benzeri bir katman gösterirse, yeniden dene düğmesine tıklaman gerekebilir:
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)
Adım 3: Gizli JSON’dan veri çıkarın (Playwright kullanırken bile).
En güvenilir yaklaşım, tarayıcı kullanırken bile hydration JSON’unu almaktır:
1 script_el = page.locator("#__UNIVERSAL_DATA_FOR_REHYDRATION__")
2 raw_json = await script_el.inner_text()
3 data = json.loads(raw_json)
4 # Yöntem 1 ile aynı JSON gezinmesi
5 user_detail = data["__DEFAULT_SCOPE__"]["webapp.user-detail"]
6 videos = user_detail.get("itemList", [])
Adım 4: Daha fazla video için sonsuz kaydırmayı yönetin.
İlk ~30 videodan fazlasına ihtiyacın varsa, aşağı kaydır ve ek XHR yanıtlarını yakala:
1 all_videos = list(videos)
2 # Kaydırırken API yanıtlarını yakala
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 # Daha fazla yükleme tetiklemek için aşağı kaydır
13 for _ in range(5): # İhtiyaca göre kaydırma sayısını ayarlayın
14 await page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
15 await asyncio.sleep(2)
16 # Yakalanan yanıtlar içinden videoları topla
17 for api_resp in api_responses:
18 items = api_resp.get("itemList", [])
19 all_videos.extend(items)
20 print(f"Toplam video: {len(all_videos)}")
21 await browser.close()
22 return all_videos
23# Çalıştır
24videos = asyncio.run(scrape_tiktok_profile("charlidamelio"))
Artık hem ilk sayfa yüklemesinden hem de kaydırmayla gelen ek sayfalardan video nesneleri listesine sahip olmalısın.
Playwright yönteminin sınırlamaları
- Açık ara en yavaş yöntemdir (tam sayfa render, ağ istekleri, kaydırma gecikmeleri)
- Daha fazla kaynak tüketir — her tarayıcı örneği ciddi miktarda bellek ve CPU kullanır
- Ölçek büyüdüğünde yine IP bazlı engellere takılabilirsin — proxy rotasyonu ile birlikte kullan
- En uygun kullanım: karmaşık etkileşimler, giriş duvarı arkasındaki içerik, CAPTCHA’larla başa çıkma veya Yöntem 1 ve 2’nin engellendiği durumlar
TikTok videolarını (.mp4) Python ile nasıl indirirsin?
Bu bölüm, TikTok çekimi hakkındaki diğer tüm rehberlerde eksik olan en büyük parçayı tamamlıyor. Metadata çıkarmak faydalı olsa da, “TikTok videolarını çekmek” diye arayanların çoğu asıl video dosyalarını ister.
TikTok, video veri nesnesinin içine indirme URL’lerini gömer:
playAddr— genellikle filigransız veya daha az filigranlı sürümdownloadAddr— TikTok’un uygulama içi indirme için sunduğu sürüm (TikTok filigranı içerir)
Her iki URL de zaman hassastır ve kısa bir süre sonra sona erer (genellikle birkaç saat içinde), bu yüzden çıkardıktan sonra gecikmeden indirmen gerekir.
Adım adım: Bir TikTok video dosyasını indirme
Adım 1: Yukarıdaki üç yöntemden biriyle video URL’sini çıkarın.
1video_url = video["video"]["playAddr"] # Filigransız sürüm
2# veya
3video_url = video["video"]["downloadAddr"] # Filigranlı sürüm
Adım 2: Doğru header’larla bir GET isteği gönderin.
İnsanların takıldığı nokta burasıdır. Sadece requests.get(video_url) yaparsan 403 alırsın. TikTok Referer header’ını kontrol eder ve tarayıcı benzeri bir User-Agent bekler.
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)
Adım 3: Yanıt içeriğini .mp4 dosyasına yazın.
stream=True kullan ve parça parça yaz — TikTok videoları büyük olabilir, tüm dosyayı belleğe almak istemezsin:
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 parçalar
5 if chunk:
6 f.write(chunk)
7print(f"İndirildi: {filename}")
Artık yerel makinenizde oynatılabilir bir .mp4 dosyan olmalı.
Filigranlı ve filigransız indirme farkı
TikTok, her videonun hem filigranlı hem filigransız sürümünü saklar. playAddr URL’si çoğu zaman daha temiz bir sürüm sağlar (oynatıcının kullandığı sürüm), downloadAddr ise içerik üreticinin kullanıcı adını içeren TikTok filigranını ekler.
Burada etik bir not: filigran, içerik üreticiyi görünür kılmak için vardır. Videoları araştırma, analiz veya dahili inceleme için indiriyorsan playAddr kullanmak genellikle uygundur. Ancak içeriği yeniden dağıtıyor ya da yeniden paylaşıyorsan, üretici atfını kaldırmak hem etik hem de telif açısından sorun yaratır. Buna aşağıdaki hukuki bölümde tekrar değineceğim.
Daha sağlam bir indirme hattı için kullanmayı düşünebilirsin — TikTok çıkarıcısı imza hesaplamasını ve URL çözümlemesini otomatik yapar, böylece header ve token süresi dolmasıyla sen uğraşmazsın.
Yan yana karşılaştırma: Hangi Python yöntemini seçmelisin?
TikTok çekme projelerine başlarken elimde olmasını çok istediğim karşılaştırma tablosu burada:
| Kriter | Yöntem 1: Gizli JSON | Yöntem 2: Dahili API | Yöntem 3: Playwright |
|---|---|---|---|
| Zorluk | Başlangıç | Orta | Orta |
| Hız | Hızlı (sayfa başına 1 istek) | Hızlı (JSON API) | Yavaş (tam sayfa render) |
| Bot karşıtı dayanıklılık | Orta | Düşük (uç noktalar değişiyor) | Yüksek (gerçek tarayıcıyı taklit eder) |
| Video .mp4 indirir mi? | Evet (playAddr çıkarılır) | Evet (yanıtta URL var) | Evet (ağ istekleri yakalanır) |
| Sonsuz kaydırmayı destekler mi? | Hayır (sadece ilk sayfa) | Evet (cursor sayfalaması) | Evet (kaydırma simülasyonu) |
| Ölçekte proxy gerekir mi? | Evet | Evet | Evet |
| Bakım ihtiyacı | Orta (JSON yapısı değişebilir) | Yüksek (uç noktalar/imzalar sık değişir) | Düşük-Orta (tarayıcı uyum sağlar) |
| En iyi kullanım | Hızlı tek seferlik profil çekimleri | Toplu veri çekimi, tüm videolar | Giriş duvarı arkasındaki ya da karmaşık içerik |
Benim önerim:
- Sadece bir profilin hızlı özetine mi ihtiyacın var? Yöntem 1 ile başla. Kurulumu yaklaşık 30 saniye sürer ve veriyi sayfa başına bir saniyenin altında döndürür.
- Bir profildeki tüm videoları sayfalama ile mi almak istiyorsun? Yöntem 2 doğru seçimdir; ancak TikTok API parametrelerini değiştirdiğinde bakım yapman gerektiğini unutma.
- Giriş duvarları, CAPTCHA’lar veya maksimum dayanıklılık mı gerekiyor? Playwright ile Yöntem 3. Daha yavaş ve daha ağırdır ama TikTok’un engellemesi en zor seçenektir.
Pratikte ben çoğu zaman Yöntem 1 ile başlar, yalnızca sınırlamalarla karşılaşırsam Yöntem 2 veya 3’e geçerim. Bu da altyapıyı sade ve maliyeti düşük tutar.
Python istemiyor musun? Kodsuz araçlarla TikTok videolarını çekin
“Python ile TikTok videoları nasıl çekilir” diye arayanların önemli bir kısmının aslında Python’a ihtiyacı yok. Onların ihtiyacı veri. Birkaç rakip profilden video metadatası almak isteyen bir pazarlama analistiysen ya da marka bahsetmelerini takip eden bir marka yöneticisiysen, proxy rotasyonu ve imza yönetimi olan bir Python ortamı kurmak gereksiz derecede karmaşık olabilir.

Yaklaşımların dürüst bir karşılaştırması:
| Yaklaşım | Beceri Seviyesi | Maliyet | Bakım | En Uygun | |---|---|---|---|---| | Python (kendin yap) | Orta ve üzeri | Ücretsiz (+ proxy maliyeti) | Yüksek (script’ler bozulur) | Tam kontrol, özel iş akışları | | (Chrome uzantısı) | Başlangıç | Ücretsiz plan mevcut | Yok (AI siteyi her seferinde yeniden okur) | Hızlı video verisi çıkarma, Sheets/Excel’e aktarma | | Apify TikTok Scraper | Başlangıç | Ücretli (çalıştırma başına) | Düşük (Apify tarafından bakımı yapılır) | Zamanlanmış toplu otomasyon | | TikAPI | Geliştirici | Ücretli abonelik | Orta | TikTok verisi üzerinde uygulama geliştirme |
Thunderbit TikTok çekimini nasıl yapar?
Thunderbit’te geliştirdiğimiz AI web scraper’dır ve geleneksel scraping araçlarından farklı çalışır. Önceden hazırlanmış CSS seçicilere veya XPath kurallarına dayanmak yerine (TikTok tasarımını her değiştirdiğinde bunlar kırılır), Thunderbit’in AI’sı sayfa yapısını her seferinde yeniden okur ve ilgili sütunları önerir — açıklama, beğeniler, hashtag’ler, video URL’si, yazar vb.
İş akışı gerçekten iki tıklamadır:
- Chrome’da bir TikTok profiline git, Thunderbit uzantısına tıkla ve “AI Suggest Fields” seçeneğine bas. Thunderbit sayfayı tarar ve bir tablo yapısı önerir.
- Önerilen sütunları gözden geçir, gerekirse düzenle ve “Scrape” düğmesine tıkla.
Veri doğrudan Google Sheets, Excel, Airtable veya Notion’a aktarılır. Bakım gerektiren CSS seçiciler yok, ayıklaması gereken kod yok, ayarlaması gereken proxy yapılandırması yok. Birkaç profilden video metadatası almak isteyen pazarlama analisti için bu, Python ortamı kurmaktan ölçülebilir derecede daha hızlıdır — ayrıca TikTok ön yüzünü güncellediğinde de bozulmaz (topluluk raporlarına göre bu birkaç haftada bir oluyor).
Thunderbit ayrıca destekler — ek yorum sayıları, müzik bilgileri veya video süresi gibi ayrıntılarla veri tablonu zenginleştirmek için her bir video sayfasını ziyaret edebilir.
üzerinden ücretsiz deneyebilirsin. Nasıl çalıştığı hakkında daha fazla bilgi için göz at.
TikTok çekimi için hukuki ve etik sınırlar
Bu konuda üst sıralarda çıkan rehberlerin hiçbiri hukuki boyutu konuşmuyor; oysa TikTok, scraping hizmetlerine karşı aktif şekilde hukuki süreç yürütmüş durumda. Bilmen gerekenler şunlar.
TikTok Kullanım Koşulları (§ 4.1) otomatik erişimi açıkça yasaklıyor. TOS ihlali suç değildir; sözleşme ihlalidir — ama hesap yasakları, IP engelleri ya da hukuki işlemle sonuçlanabilir.
Hukuki tablo, kamuya açık veriler söz konusu olduğunda birçok kişinin sandığından daha esnek. Önemli emsal karar Meta Platforms v. Bright Data (N.D. Cal., Ocak 2024) davasıdır; mahkeme, çıkış yapılmış halde kamuya açık verilerin çekilmesinin Meta’nın Kullanım Koşullarını ihlal etmediğine karar verdi. Meta davayı geri çekti ve temyiz hakkından feragat etti. Daha önceki hiQ v. LinkedIn davasında da Dokuzuncu Daire, kamuya açık verilerin çekilmesinin CFAA ihlali olmadığına hükmetti (karar Van Buren sonrasında da teyit edildi) — ancak hiQ sonunda uzlaşmaya gitti, 500 bin dolar ödedi ve kalıcı bir ihtiyati tedbiri kabul etti; bu da TOS yaptırımlarının hâlâ ciddi sonuçlar doğurabileceğini gösteriyor.
GDPR ve CCPA, AB veya Kaliforniya kullanıcılarından kişisel veri topluyorsan geçerlidir. Kamuya açık gönderileri çekmek başka bir şeydir; bireysel kullanıcıların kişisel bilgileriyle veri tabanı kurmak başka bir şey.
Pratik kurallar:
- İstek hızını sınırla (TikTok sunucularını aşırı zorlamayın)
- Gizli hesapları veya reşit olmayanlara ait içerikleri çekmeyin
- Telif hakkıyla korunan video içeriklerini ticari olarak yeniden dağıtmayın
robots.txtkurallarına saygı gösterin (TikTok çoğu otomatik taramayı engelliyor)- Videoları kişisel araştırma veya analiz için indirmek, onları yeniden paylaşmaktan farklıdır — bu ayrımı bilin
Not: Bu içerik eğitim amaçlıdır, hukuki tavsiye değildir. Çekilmiş TikTok verileriyle ticari bir ürün geliştiriyorsan bir avukata danış.
Sonuç: Öne çıkanlar
2025’te TikTok scraping sürekli değişen bir hedef. Platformun bot karşıtı sistemi web’deki en gelişmiş sistemlerden biri ve basit yaklaşımlar (düz requests, ChatGPT’nin ürettiği kod parçaları, eski eğitimler) başarısız olur. Ama doğru yöntemle bunu yapmak tamamen mümkün.
Özetle:
- Yöntem 1 (Gizli JSON) en hızlı ve en basit yöntemdir — hızlı profil çekimleri için buradan başla.
- Yöntem 2 (Dahili API) sana sayfalama ve toplu erişim sağlar, ancak uç noktalar ve imza gereksinimleri sık değiştiği için bakım ihtiyacı en yüksektir.
- Yöntem 3 (Playwright) bot karşıtı önlemlere karşı en dayanıklı seçenektir; bedeli ise hız ve kaynak tüketimidir.
- Üç yöntem de video indirme URL’lerini çıkarabilir — ve bu rehber, .mp4 dosyalarını doğru header’larla gerçekten indirmenin adımlarını gösteren tek rehberdir.
- Teknik olmayan kullanıcılar için, kod yazmadan ve bakım yapmadan aynı veriye çok daha hızlı ulaşma yolu sunar. AI tabanlı yaklaşımı sayesinde TikTok tasarımını değiştirdiğinde kırılmaz — ki topluluk raporlarına göre bu pek çok kişinin hoşuna gitmeyecek kadar sık oluyor.
Python kurmadan başlamak istiyorsan, — ücretsiz plan birkaç profilde test etmek ve iş akışına uyup uymadığını görmek için yeterlidir. Python yolunu seçenler için ise Yöntem 1 ile başla, verini doğrula ve oradan büyüt.
Web scraping tekniklerini daha derinlemesine öğrenmek ister misin? , ve rehberlerimize göz atın.
Sık sorulan sorular
Python ile TikTok videolarını çekmek yasal mı?
Kamuya açık verileri çekmek, açık ve net bir ihlâlden çok hukuki olarak gri bir alandır. Meta v. Bright Data (2024) kararı, çıkış yapılmış halde kamu verisi çekmenin platform kullanım koşullarını ihlal etmediği yönündeki görüşü destekliyor. Ancak TikTok’un Kullanım Koşulları otomatik erişimi açıkça yasaklıyor ve kişisel veriler için GDPR/CCPA yükümlülükleri geçerli. Çoğu kişinin korktuğu şekilde doğrudan yasa dışı değil, ama risksiz de değil. Kendi kullanım senaryon için bir hukuk uzmanına danış.
TikTok çekimi için en iyi Python kütüphanesi hangisi?
Bu, yaklaşımına bağlıdır. Gizli JSON çıkarma için (Yöntem 1) requests + beautifulsoup4 yeterlidir. Dahili API çağrıları için (Yöntem 2) requests veya httpx iş görür. Tarayıcı otomasyonu için (Yöntem 3) güncel standart playwright’dır — yeni scraping projelerinde Selenium’u kullanım açısından geride bırakmış durumda; aylık yaklaşık ile Selenium’un yaklaşık 53 milyon indirmesinin önünde yer alıyor. Daha üst seviye bir arayüz istiyorsan TikTok-Api sarmalayıcısı da düşünmeye değer; GitHub’da yaklaşık 6,3 bin yıldızı var, ancak kırılgan olabilir.
Python kullanarak filigransız TikTok videosu indirebilir miyim?
Evet. TikTok’un kendi verisi, genellikle standart filigran olmadan videonun bir sürümünü sağlayan playAddr URL’sini içerir. Bu rehber, üç yöntemin her birinden bu URL’yi nasıl çıkaracağını ve doğru header’larla .mp4 dosyasını nasıl indireceğini gösteriyor. Buna karşılık downloadAddr alanı filigranı içerir.
Neden TikTok scraper’ım boş veri döndürüyor?
En yaygın neden, TikTok’un içeriği render etmek için JavaScript istemesidir. Temel bir requests.get() yalnızca iskelet HTML’yi çeker — gerçek veri ya gizli JSON script etiketinde (Yöntem 1) ya da JavaScript ile dinamik olarak yüklenir (Yöntem 3). Boş HTML alıyorsan önce Yöntem 1’i dene. O da başarısız olursa header’larını kontrol et (403 hatalarının bir numaralı nedeni eksik Referer’dır) veya Playwright ile Yöntem 3’e geç.
TikTok çekimi yaparken engellenmekten nasıl kaçınırım?
Gerçekçi tarayıcı header’ları kullan (User-Agent, Referer ve Accept-Language dahil), residential veya mobil proxy’ler döndür (veri merkezi IP’leri dakikalar içinde işaretlenir), istekler arasında rastgele gecikmeler ekle (en az 1–3 saniye) ve çok yüksek hacimlerde çekim yapmaktan kaçın. Yöntem 3 (Playwright), gerçek bir tarayıcı oturumunu taklit ettiği için engellenmeye karşı en yüksek dayanıklılığı sunar. Ciddi hacimler için proxy maliyetini bütçeye dahil et — giriş seviyesi residential proxy’ler büyük sağlayıcılarda yaklaşık seviyesindedir.