TikTok artık aylık yaklaşık 1,9 milyar aktif kullanıcıya sahip ve içerik üreticiler her gün tahminen 23 milyon video yüklüyor. Bu veri selinin küçük bir kısmını bile toplamaya kalktıysanız, ne kadar yorucu olduğunu zaten biliyorsunuzdur.
Genelde süreç şöyle ilerliyor: "Python ile TikTok videoları nasıl çekilir" diye aratıyorsunuz, bir eğitimden kısa bir kod parçası kopyalıyorsunuz (ya da ChatGPT’ye yazdırıyorsunuz), çalıştırıyorsunuz ve sonuç… hiçbir şey oluyor. Boş HTML. 403 hatası. Ya da o meşhur "Process finished with exit code 0" mesajı ama ortada tek satır çıktı yok. Bu döngüyü sayısız GitHub issue’sunda ve Reddit başlığında gördüm; bu rehberi hazırlamamın nedeni de tam olarak bu. 2025’te gerçekten işe yarayan üç Python yöntemini anlatacağım, gerçek .mp4 video dosyalarını indirmek için adım adım bir anlatım sunacağım (sadece metadata değil — diğer rehberlerin çoğunun durduğu yer burası), ayrıca kullanım senaryonuza en uygun yaklaşımı seçebilmeniz için bir karşılaştırma tablosu paylaşacağım. Python kullanmak zorunda değilseniz, aynı veriyi yaklaşık iki tıklamayla almanızı sağlayan Thunderbit gibi kodsuz alternatiflere de değineceğim.
"TikTok videolarını çekmek" aslında ne demek?
Koda geçmeden önce, insanlar "TikTok videolarını çekmek" derken neyi kastettiklerini netleştirelim; çünkü bu ifade iki çok farklı şeyi kapsıyor:
- Video metadata’sını çıkarmak: Açıklama metni, hashtag’ler, beğeni sayıları, yorum sayıları, paylaşım sayıları, görüntülenme sayıları, paylaşım tarihleri, yazar bilgileri. Çoğu eğitim içeriği buna odaklanır.
- Gerçek video dosyalarını (.mp4) indirmek: Videonun kendisini makinenize kaydetmek. İnsanların "TikTok videolarını çekmek" yazdığında aslında çoğu zaman istediği şey budur — ama neredeyse kimse bu kısmı anlatmaz.
Bu rehber her ikisini de kapsıyor. Aşağıdaki her yöntem hem metadata’yı çıkarabilir hem de .mp4 dosyalarını kaydetmeniz için gereken indirme URL’lerini verebilir.
Neden TikTok videolarını Python ile çekmelisiniz?
Kullanıcı başına günde yaklaşık 280 video izlendiği ve TikTok Shop’un 33 milyar doların üzerinde küresel reklam geliri ürettiği bir ortamda, TikTok verilerine erişmenin iş değeri oldukça yüksek. En sık gördüğüm kullanım alanları şunlar:
| Kullanım Senaryosu | Neyi Çekiyorsunuz | 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 | Bahsedilme sayıları, kampanya erişimi, kitle duyarlılığı | Marka yöneticileri, PR ekipleri |
| Rekabet Analizi | Rakip video performansı, reklam kreatifleri, TikTok Shop listeleri | E-ticaret ekipleri, ürün ekipleri |
| Pazar Araştırması | Yeni trendler, kullanıcı davranışı, ü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 gerçek: ABD’de TikTok reklam gelirinin 2026’da 23,4 milyar dolara ulaşması bekleniyor ve affiliate içerik üreticileri TikTok Shop’taki önde gelen kategorilerde gelirin yüzde 82–84’ünü oluşturuyor. E-ticaret ya da influencer pazarlamasıyla ilgileniyorsanız, bu verinin doğrudan parasal değeri var.
Temel Python kodunuz neden TikTok’ta başarısız oluyor?
Buna benzer bir şey denediyseniz ve sonuç alamadıysanız, yalnız değilsiniz:
import requests
from bs4 import BeautifulSoup
resp = requests.get("https://www.tiktok.com/@someuser")
soup = BeautifulSoup(resp.text, "html.parser")
# ...ve sonra HTML içinde işe yarar hiçbir şey yok
Nedeni basit: TikTok, kazınması en zor platformlardan biri. Basit bir requests.get() çağrısı, içeriğin büyük ölçüde boş olduğu bir HTML iskeleti döndürür; çünkü gerçek içerik tarayıcıda JavaScript ile oluşturulur. Üstelik TikTok; davranış analizi, TLS parmak izi takibi, istek imzası üreten özel bir JavaScript sanal makinesi ve önceden haber vermeden 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, otomatik trafik 2024’te ilk kez insan trafiğini geçti — botlar artık tüm internet trafiğinin yüzde 51’ini oluşturuyor. TikTok bunun farkında ve savunmasını buna göre kurmuş durumda.
Sorunun nerede olduğunu anlamanız ve doğru yönteme atlamanız için kısa bir teşhis tablosu:
| Belirti | Muhtemel Neden | Sorunu Çözen Yöntem |
|---|---|---|
| Boş HTML / veri yok | JS ile oluşturulan içerik; requests JavaScript çalıştıramaz | Yöntem 1 (Gizli JSON) veya Yöntem 3 (Playwright) |
| 403 / Erişim Engellendi | Eksik ya da yanlış başlıklar; bot algılama | Doğru başlıklarla Yöntem 1 |
| Veri bir kez çalışıyor, sonra duruyor | Hız limiti / IP engeli | Proxy rotasyonu (tüm yöntemler) |
| Giriş duvarı çıkıyor | Oturum/cookie 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ğitim verisinden beri değişmiş | Üç yöntem de (güncel yaklaşımlar) |
Hız limiti eşiği, yumuşak bloklar veya CAPTCHA’lar görünmeye başlamadan önce IP başına dakikada kabaca 30–60 istek civarında. Veri merkezi IP’leri dakikalar içinde işaretlenir — hacimli kullanım için neredeyse mutlaka residential veya mobile proxy gerekir.
Genel bakış: Python ile TikTok videolarını çekmenin 3 yöntemi
İşte yol haritası. Her yöntemin farklı artıları ve eksileri var; üçünü de çalışan kodlarla anlatacağım:
- Gizli JSON Çıkarmak — TikTok sayfalarına gömülü
__UNIVERSAL_DATA_FOR_REHYDRATION__script etiketini ayrıştırın. En hızlı, en basit yöntem; tarayıcı gerekmez. - TikTok’un Dahili API’si — Cursor tabanlı sayfalama ile toplu veri almak için belgesiz
/api/post/item_list/uç noktasını doğrudan çağırın. - Playwright ile Tarayıcı Otomasyonu — Sonsuz kaydırma, dinamik içerik ve giriş duvarlarını yönetmek için sayfaları headless bir tarayıcıda render edin.
Bu üç yöntemle gerçek .mp4 video dosyalarını da indirebilirsiniz — bunu yöntem anlatımlarından sonra ayrı bir bölümde ele alıyorum. Karar vermenizi kolaylaştırmak için sonunda tam bir karşılaştırma tablosu da var.
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 uç JavaScript’in normalde render edeceği tüm profil ve video verilerini içerir — yani tek bir HTTP isteğiyle, tarayıcıya ihtiyaç duymadan bu veriyi alabilirsiniz.
Gerekli olanlar
- Python 3.8+
requests(veyahttpx)beautifulsoup4(veyaparsel)- Doğru başlıklar:
User-Agent,Referer,Accept-Language
Bağımlılıkları kurun:
pip install requests beautifulsoup4
Adım adım: Script etiketinden TikTok video verisini çıkarma
Adım 1: Gerçekçi tarayıcı başlıklarıyla bir GET isteği gönderin.
Yeni başlayanların en sık hata yaptığı yer burasıdır. Başlıksız bir requests.get() gönderirseniz, TikTok 403 ya da CAPTCHA sayfası döndürür. En azından güncel bir tarayıcı User-Agent değeri ve bir Referer başlığı gerekir.
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)
Adım 2: HTML’i ayrıştırın ve hydration script etiketini bulun.
soup = BeautifulSoup(resp.text, "html.parser")
script_tag = soup.find("script", id="__UNIVERSAL_DATA_FOR_REHYDRATION__")
Eğer script_tag None ise, TikTok sizi engellemiş olabilir (status code’u kontrol edin) ya da etiket kimliğini değiştirmiştir (nadir ama mümkün).
Adım 3: Script içeriğini JSON olarak yükleyin.
data = json.loads(script_tag.string)
Adım 4: Video metadata’sı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:
user_detail = data["__DEFAULT_SCOPE__"]["webapp.user-detail"]
user_info = user_detail["userInfo"]
# Profil istatistikleri
stats = user_info["stats"]
print(f"Takipçi: {stats['followerCount']}, Beğeni: {stats['heartCount']}")
# Video listesi (videoların ilk sayfası)
item_list = user_detail.get("itemList", [])
for video in item_list:
print(video["desc"]) # Açıklama
print(video["stats"]["playCount"]) # Görüntülenme
print(video["video"]["playAddr"]) # Video indirme URL’si (filigransız)
print(video["video"]["downloadAddr"]) # Video indirme URL’si (filigranlı)
Adım 5: Video indirme URL’lerini çıkarın.
playAddr alanı genellikle videonun daha temiz bir sürümünü sağlar (çoğu zaman TikTok filigranı olmadan), downloadAddr ise standart filigranı içerir. İkisi de .mp4 dosyasına giden doğrudan URL’lerdir — ancak indirme için belirli başlıklar gerekir (bunları aşağıdaki indirme bölümünde anlatıyorum).
Artık elinizde her biri açıklama, istatistikler, oluşturulma zamanı, hashtag’ler (challenges[] ve textExtra içinde) ve doğrudan video URL’lerini içeren video metadata nesneleri olmalı.
Gizli JSON yönteminin sınırlamaları
- Sadece ilk sayfa yüklemesindeki veriyi yakalar — genellikle bir profildeki ilk ~30 video
- Sonsuz kaydırma veya sayfalama desteklemez (“sonraki sayfa” isteği yoktur)
- TikTok script etiketi kimliğini veya JSON yapısını değiştirirse ayrıştırıcı bozulur (bu periyodik olarak olur — Pydantic doğrulaması bunu erken yakalamaya yardımcı olur)
- En uygun kullanım: hızlı profil taramaları, tek seferlik veri çekimleri veya yalnızca en güncel videolara ihtiyaç duyduğunuz durumlar
Yöntem 2: TikTok videolarını dahili API üzerinden çekme
TikTok’un ön yüzü tüm videoları bir anda yüklemez — siz 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ğırabilirsiniz; bu da size cursor tabanlı sayfalama ve bir profildeki tüm videolara erişim sağlar (sadece ilk sayfa değil).
Dahili API uç noktasını nasıl bulursunuz?
TikTok profil sayfasında Chrome DevTools’u açın, Network sekmesine gidin, XHR filtresini seçin ve aşağı kaydırın. Şu tür URL’lere istekler göreceksiniz:
https://www.tiktok.com/api/post/item_list/?WebIdLastTime=...&aid=1988&count=35&cursor=0&secUid=...
Önemli parametreler şunlardır:
secUid— profilin benzersiz kimliği (bunu Yöntem 1’deki JSON’dan,userInfo.user.secUidaltında çıkarabilirsiniz)cursor— sayfalama başlangıç noktası (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 değerini alın.
Bunu gizli JSON’dan (Yöntem 1) veya profil sayfasının HTML’inden çekebilirsiniz.
Adım 2: API isteğini oluşturup gönderin.
import requests
import json
sec_uid = "MS4wLjABAAAA..." # Yöntem 1’den
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()
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ı sayfalandırarak alın.
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"{len(items)} video alındı, toplam: {len(all_videos)}, hasMore: {has_more}")
print(f"Toplam çekilen video sayısı: {len(all_videos)}")
Her tur bir sonraki paketi ve yeni bir cursor değerini döndürür. Döngü, hasMore False olana kadar sürer.
Dahili API yönteminin sınırlamaları
- TikTok bu uç noktaları ve gerekli parametreleri sık sık değiştirir — bu yöntem en fazla bakım gerektiren yöntemdir. Son aylarda bazı istekler
msToken,X-Bogusveya TikTok’un özel JavaScript VM’si tarafından üretilen başka imza parametreleri isteyebilir (spoiler: bunu saf Python ile yeniden üretmek hiç kolay değildir). - Bazı veri türleri için oturum çerezleri veya ek token’lar gerekebilir
- IP tabanlı hız limiti hâlâ geçerlidir — proxy rotasyonu önerilir
- Boş
itemListdizileri almaya başlarsanız, büyük olasılıklamsTokendeğeriniz bayatlamıştır (tarayıcıda yaklaşık her 10 saniyede bir yenilenir) - En uygun kullanım: bir profildeki tüm videoları topluca çekmeniz gerektiğinde ve Yöntem 1’in yalnızca ilk sayfa sınırı yeterli olmadığında
Yöntem 3: Playwright ile TikTok videolarını çekme (tarayıcı otomasyonu)
İlk iki yöntem engellere takıldığında — giriş gereksinimleri, CAPTCHA’lar veya kopyalayamadığınız imza parametreleri — devreye Playwright girer. Gerçek bir (headless) tarayıcı başlatır, TikTok’ta bir insan gibi gezinir ve JavaScript render’ını, sonsuz kaydırmayı ve hatta oturum açılmış hesapları yönetebilir.
TikTok çekimi için Playwright kurulumu
Playwright’ı ve tarayıcı ikili dosyalarını kurun:
pip install playwright
playwright install firefox
TikTok çekimi için Chromium yerine Firefox kullanmanızı öneririm. Topluluk testleri, Firefox’un parmak izi uyumluluğunda daha iyi sonuç verdiğini sürekli gösteriyor ve TikTok’un bot algılama sistemi Chromium tabanlı headless tarayıcılara karşı özellikle agresif davranıyor.
Ek gizlilik için Playwright’ı patchright (yama uygulanmış bir Playwright çatalı) ya da Camoufox (anti-detection için C++ seviyesinde değiştirilmiş Firefox) ile birlikte kullanmayı düşünebilirsiniz. Bağımsız benchmark’larda Camoufox, büyük bot algılama servislerine karşı neredeyse kusursuz gizlilik puanları elde ediyor.
Adım adım: Playwright ile TikTok profil videolarını çekme
Adım 1: Headless Firefox tarayıcısını başlatın ve profile gidin.
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")
Adım 2: Video ızgarasının yüklenmesini bekleyin.
# Video öğelerinin görünmesini bekleyin
await page.wait_for_selector('[data-e2e="user-post-item"]', timeout=15000)
TikTok "Bir şeyler ters gitti" uyarısı gösterirse, yeniden dene düğmesine tıklamanız gerekebilir:
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)
Adım 3: Gizli JSON’dan veri çıkarın (Playwright kullanırken bile).
En güvenilir yaklaşım, tarayıcı kullanıyor olsanız bile yine hydration JSON’unu almaktır:
script_el = page.locator("#__UNIVERSAL_DATA_FOR_REHYDRATION__")
raw_json = await script_el.inner_text()
data = json.loads(raw_json)
# Yöntem 1 ile aynı JSON gezinmesi
user_detail = data["__DEFAULT_SCOPE__"]["webapp.user-detail"]
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ız varsa, aşağı kaydırın ve ek XHR yanıtlarını yakalayın:
all_videos = list(videos)
# Kaydırırken API yanıtlarını yakala
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)
# Daha fazla yüklemeyi tetiklemek için aşağı kaydır
for _ in range(5): # Gerektikçe kaydırma sayısını ayarlayın
await page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
await asyncio.sleep(2)
# Yakalanan yanıtlar içindeki videoları topla
for api_resp in api_responses:
items = api_resp.get("itemList", [])
all_videos.extend(items)
print(f"Toplam video sayısı: {len(all_videos)}")
await browser.close()
return all_videos
# Çalıştır
videos = asyncio.run(scrape_tiktok_profile("charlidamelio"))
Artık hem ilk sayfa yüklemesinden hem de kaydırma ile açılan ek sayfalardan gelen video nesnelerinin bir listesini elde etmiş olmalısınız.
Playwright yönteminin sınırlamaları
- Açık ara en yavaş yöntemdir (tam sayfa render, ağ gidiş gelişleri, kaydırma gecikmeleri)
- Daha fazla kaynak tüketir — her tarayıcı örneği ciddi bellek ve CPU kullanır
- Ölçek büyüdüğünde IP bazlı bloklamaya yine açıktır — proxy rotasyonuyla birlikte kullanın
- En uygun kullanım: karmaşık etkileşimler, giriş duvarlı içerik, CAPTCHA yönetimi veya Yöntem 1 ve 2 engellendiğinde
Python ile TikTok videoları (.mp4) nasıl indirilir?
Bu bölüm, diğer tüm TikTok çekim eğitimlerinde eksik olan en büyük parçayı tamamlıyor. Metadata çıkarmak faydalıdır, ama "TikTok videolarını çekmek" diye arayan çoğu kişi gerçek video dosyalarını ister.
TikTok, video verisi nesnesi içinde indirme URL’leri gömer:
playAddr— genellikle filigransız ya da daha düşük 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 duyarlıdır ve kısa süre sonra geçerliliğini yitirir (genellikle birkaç saat), bu yüzden URL’leri çıkarır çıkarmaz hızlıca indirmeniz gerekir.
Adım adım: Bir TikTok video dosyasını indirme
Adım 1: Yukarıdaki üç yöntemden herhangi biriyle video URL’sini çıkarın.
video_url = video["video"]["playAddr"] # Filigransız sürüm
# veya
video_url = video["video"]["downloadAddr"] # Filigranlı
Adım 2: Doğru başlıklarla bir GET isteği gönderin.
İnsanların takıldığı adım budur. Sadece requests.get(video_url) derseniz, 403 alırsınız. TikTok Referer başlığını kontrol eder ve tarayıcı benzeri bir User-Agent bekler.
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)
Adım 3: Yanıt içeriğini .mp4 dosyasına yazın.
stream=True kullanın ve parçalar halinde yazın — TikTok videoları büyük olabilir ve tüm dosyayı belleğe almak istemezsiniz:
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): # 1 MB parçalar
if chunk:
f.write(chunk)
print(f"İndirildi: {filename}")
Artık yerel makinenizde oynatılabilir bir .mp4 dosyanız olmalı.
Filigranlı vs. filigransız indirme
TikTok, her videonun hem filigranlı hem de 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 yazarın kullanıcı adını içeren TikTok filigranını barındırır.
Burada etik bir not: Filigran, üreticiyi kredilendirmek için vardır. Videoları araştırma, analiz veya iç inceleme için indiriyorsanız, playAddr kullanmak genellikle uygundur. Ancak içeriği yeniden dağıtıyor veya yeniden paylaşıyorsanız, üretici atfını kaldırmak hem etik hem de telif hakkı açısından sorun doğurur. Bununla ilgili daha fazlası aşağıdaki hukuki bölümde.
Daha sağlam bir indirme akışı için yt-dlp kullanmayı düşünebilirsiniz — TikTok çıkarıcısı imza hesaplamasını ve URL çözümlemesini otomatik olarak yönetir, böylece başlıklar ve token süresi dolmasıyla tek tek uğraşmazsınız.
Yan yana karşılaştırma: Hangi Python yöntemini kullanmalısınız?
TikTok çekim projeleri üzerinde çalışmaya başladığımda böyle bir karşılaştırma tablosu olmasını çok isterdim:
| 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ı sistemlere dayanıklılık | Orta | Düşük (uç noktalar değişir) | 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ğ trafiği yakalanır) |
| Sonsuz kaydırmayı destekler mi? | Hayır (yalnızca ilk sayfa) | Evet (cursor sayfalama) | Evet (kaydırma simülasyonu) |
| Ölçek büyüdüğünde 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 uygun kullanım | Hızlı tek seferlik profil çekimleri | Toplu veri çekimi, tüm videolar | Giriş duvarlı veya karmaşık içerik |
Benim önerim:
- Sadece bir profilin hızlı özetine mi ihtiyacınız var? Yöntem 1 ile başlayın. Kurulumu yaklaşık 30 saniye sürer ve sayfa başına bir saniyenin altında veri döndürür.
- Bir profildeki tüm videoları sayfalama ile mi çekmek istiyorsunuz? Yöntem 2 doğru seçimdir; ancak TikTok API parametrelerini değiştirdiğinde bakım yapmaya hazır olun.
- Giriş duvarları, CAPTCHA’lar veya maksimum dayanıklılık mı gerekiyor? Playwright ile Yöntem 3. Daha yavaş ve ağırdır, ama TikTok’un engellemesi en zor olan yöntem budur.
Pratikte ben çoğu zaman Yöntem 1 ile başlar, yalnızca sınırlara takıldığımda Yöntem 2 veya 3’e geçerim. Böylece altyapı sade, maliyet düşük kalır.
Python istemiyor musunuz? Kodsuz araçlarla TikTok videolarını çekin
"Python ile TikTok videoları nasıl çekilir" diye arayan birçok kişinin aslında Python’a ihtiyacı yok. Onların ihtiyacı veridir. Eğer birkaç rakip profilinden video metadata’sı almak isteyen bir pazarlama analistiyseniz ya da bahsedilme takibi yapan bir marka yöneticisiyseniz, proxy rotasyonu ve imza yönetimi olan bir Python ortamı kurmak fazla uğraştırıcı olabilir.

Yaklaşımların dürüst bir karşılaştırması:
| Yaklaşım | Yetenek Seviyesi | Maliyet | Bakım | En Uygun Kullanım |
|---|---|---|---|---|
| Python (kendin yap) | Orta+ | Ücretsiz (+ proxy maliyeti) | Yüksek (scriptler bozulur) | Tam kontrol, özel veri akışları |
| Thunderbit (Chrome eklentisi) | 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 sürdürülür) | Zamanlanmış toplu otomasyon |
| TikAPI | Geliştirici | Ücretli abonelik | Orta | TikTok verisi üzerine uygulama kurma |
Thunderbit TikTok çekimini nasıl ele alıyor?
Thunderbit, Thunderbit’te geliştirdiğimiz AI web scraper’dır ve geleneksel çekim araçlarından farklı çalışır. Önceden tanımlı CSS seçicilere veya XPath kurallarına güvenmek yerine (TikTok düzenini her değiştirdiğinde bunlar bozulur), Thunderbit’in AI’sı sayfa yapısını her seferinde yeniden okur ve açıklama, beğeniler, hashtag’ler, video URL’si, yazar gibi ilgili sütunları önerir.
İş akışı gerçekten iki tıklamadan ibaret:
- Chrome’da bir TikTok profiline gidin, Thunderbit eklentisini açın ve "AI Suggest Fields" seçeneğine tıklayın. Thunderbit sayfayı tarar ve bir tablo yapısı önerir.
- Önerilen sütunları inceleyin, gerekirse düzenleyin ve "Scrape"e tıklayın.
Veri doğrudan Google Sheets, Excel, Airtable veya Notion’a aktarılır. CSS seçicileri bakımda tutmak yok, kod hata ayıklamak yok, proxy yapılandırmak yok. Birkaç profilden video metadata’sına ihtiyaç duyan 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 alt sayfa çekimini destekler — her bir video sayfasını ziyaret ederek veri tablonuzu tam yorum sayıları, müzik bilgileri veya video süresi gibi ek detaylarla zenginleştirebilir.
Bunu Thunderbit Chrome Extension üzerinden ücretsiz deneyebilirsiniz. Nasıl çalıştığı hakkında daha fazla bilgi için YouTube kanalımıza göz atın.
TikTok çekimi için yasal ve etik sınırlar
Bu konudaki üst sıralardaki rehberlerin neredeyse hiçbiri yasallıktan bahsetmiyor; oysa TikTok’un çekim hizmetlerine karşı aktif olarak yasal adım attığı düşünüldüğünde bu önemli bir eksiklik. Bilmeniz gerekenler şunlar.
TikTok Kullanım Şartları (§ 4.1) otomatik erişimi açıkça yasaklar. Kullanım şartlarını ihlal etmek suç değil, sözleşme ihlalidir — ancak hesabın askıya alınmasına, IP engeline veya hukuki sürece yol açabilir.
Kamuya açık veriler söz konusu olduğunda hukuki tablo, çoğu kişinin sandığından daha esnektir. Önde gelen emsal, Meta Platforms v. Bright Data (N.D. Cal., Ocak 2024) davasıdır; mahkeme, oturum açmadan kamuya açık verilerin çekilmesinin Meta’nın Kullanım Şartlarını ihlal etmediğine hükmetti. Meta davayı geri çekti ve temyiz hakkından feragat etti. Daha önceki hiQ v. LinkedIn dokuzuncu bölge kararı (Van Buren sonrası da yeniden teyit edildi), kamuya açık verilerin çekilmesinin CFAA ihlali olmadığı sonucunu ortaya koydu — ancak hiQ sonunda uzlaşmaya gitti, 500 bin dolar ödedi ve kalıcı bir ihtiyati tedbiri kabul etti; bu da kullanım şartlarının uygulanması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ız geçerlidir. Kamuya açık gönderileri çekmek başka bir şeydir; bireysel kullanıcıların kişisel bilgilerini içeren veritabanları oluşturmak başka bir şey.
Pratik yönergeler:
- İstek hızını sınırlayın (TikTok sunucularına yüklenmeyin)
- Özel hesapları veya reşit olmayanlara ait içerikleri çekmeyin
- Telif hakkıyla korunan video içeriğini ticari amaçla 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, bunları yeniden paylaşmaktan farklıdır — bu ayrımı anlayın
Uyarı: Bu içerik eğitim amaçlıdır, hukuki tavsiye değildir. Çekilmiş TikTok verisi üzerine ticari bir ürün geliştiriyorsanız bir avukata danışın.
Sonuç: Öne çıkanlar
2025’te TikTok çekimi sürekli değişen bir hedeftir. Platformun bot karşıtı sistemi web’deki en gelişmiş sistemlerden biridir ve yüzeysel yaklaşımlar (düz requests, ChatGPT’nin ürettiği parçalar, eski eğitimler) başarısız olur. Ama doğru yöntemle, bu tamamen yapılabilir.
Özetle:
- Yöntem 1 (Gizli JSON) en hızlı ve en basit yöntemdir — hızlı profil çekimleri için buradan başlayın.
- Yöntem 2 (Dahili API) sayfalama ve toplu erişim sağlar, ancak uç noktalar ve imza gereksinimleri sık değiştiği için en çok bakım isteyen yöntemdir.
- Yöntem 3 (Playwright) bot karşıtı önlemlere karşı en dayanıklı yöntemdir; bunun bedeli hız ve kaynak tüketimidir.
- Üç yöntemin de video indirme URL’lerini çıkarma yeteneği vardır — ve bu rehber, .mp4 dosyalarını doğru başlıklarla gerçekten indirmenizi adım adım anlatan tek rehberdir.
- Teknik olmayan kullanıcılar için, Thunderbit kod yazmadan veya bakım yapmadan aynı veriye çok daha hızlı bir yol sunar. AI tabanlı yaklaşımı sayesinde, TikTok düzenini değiştirdiğinde bozulmaz — ki topluluk raporlarına göre bu, kimsenin hoşlanmayacağından daha sık olur.
Python kurmadan başlamak istiyorsanız, Thunderbit Chrome Extension’ı deneyin — ücretsiz plan birkaç profilde test etmek ve iş akışınıza uygun olup olmadığını görmek için yeterli. Python yolunu seçecekler için önce Yöntem 1 ile başlayın, verinizi doğrulayın ve oradan ölçekleyin.
Web scraping tekniklerinde daha da derine inmek ister misiniz? Herhangi bir web sitesinden nasıl veri çekilir, web scraping en iyi uygulamaları ve Google Sheets’e veri çekme rehberlerimize göz atın.
SSS
Python ile TikTok videolarını çekmek yasal mı?
Kamuya açık verileri çekmek, net bir ihlalden ziyade hukuki açıdan gri bir alandır. Meta v. Bright Data (2024) kararı, oturum kapalı halde kamuya açık verilerin çekilmesinin platform kullanım şartlarını ihlal etmediği görüşünü destekliyor. Ancak TikTok’un Kullanım Şartları otomatik erişimi açıkça yasaklıyor ve kişisel veriler için GDPR/CCPA yükümlülükleri geçerli. Korkulduğu kadar yasadışı değil, ama risksiz de değil. Kendi kullanım senaryonuz için bir hukuk uzmanına danışın.
TikTok çekimi için en iyi Python kütüphanesi hangisi?
Bu, hangi yaklaşımı kullandığınıza bağlı. Gizli JSON çıkarımı (Yöntem 1) için requests + beautifulsoup4 yeterlidir. Dahili API çağrıları (Yöntem 2) için requests veya httpx iş görür. Tarayıcı otomasyonu (Yöntem 3) için güncel standart playwright’tır — yeni çekim projelerinde benimsenme açısından Selenium’u geride bırakmış durumda; aylık yaklaşık 59 milyon PyPI indirmesi ile Selenium’un yaklaşık 53 milyonluk indirme sayısının önünde. Daha üst seviye bir arayüz istiyorsanız TikTok-Api sarmalayıcısı da (~6,3 bin GitHub yıldızı) değerlendirilebilir, ancak kırılgan olabilir.
Python kullanarak filigransız TikTok videosu indirebilir miyim?
Evet. TikTok’un kendi verisi, genellikle standart filigran üst katmanı olmayan bir sürüm sağlayan playAddr URL’sini içerir. Bu rehber, bu URL’yi üç yöntemden herhangi biriyle nasıl çıkaracağınızı ve doğru başlıklarla .mp4 dosyasını nasıl indireceğinizi gösteriyor. Buna karşılık downloadAddr alanı filigranı içerir.
Neden TikTok çekicim boş veri döndürüyor?
En yaygın neden, TikTok’un içeriği oluşturmak için JavaScript gerektirmesidir. Basit bir requests.get() yalnızca iskelet HTML’i alır — gerçek veri ya gizli bir JSON script etiketinin içindedir (Yöntem 1) ya da JavaScript ile dinamik olarak yüklenir (Yöntem 3). Boş HTML alıyorsanız önce Yöntem 1’i deneyin. O da olmazsa, başlıklarınızı kontrol edin (eksik Referer, 403 hatalarının bir numaralı nedenidir) ya da Playwright ile Yöntem 3’e geçin.
TikTok çekimi yaparken engellenmekten nasıl kaçınırım?
Gerçekçi tarayıcı başlıkları kullanın (User-Agent, Referer ve Accept-Language dahil), residential veya mobile proxy’leri rotasyonla değiştirin (veri merkezi IP’leri dakikalar içinde işaretlenir), istekler arasına rastgele gecikmeler ekleyin (en az 1–3 saniye) ve aşırı yüksek hacimlerde çekim yapmaktan kaçını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 ekleyin — giriş seviyesi residential proxy’ler büyük sağlayıcılarda yaklaşık $2–4/GB seviyesindedir.
- Daha Fazla Bilgi


