Scraper ilk çalıştırmada sorunsuzdur. Üçüncü çalıştırmada 403, boş response veya CAPTCHA döngüsü gelir. Kod değişmedi. Site de değişmedi. Anti-bot sistemi session profilini çıkardı ve engellemeye başladı.
TL;DR: blokların çoğu dört katmandan gelir: network, browser identity, davranış ve session state. Fingerprints ve proxy routing'i engine seviyesinde yöneten bir anti-detect browser ile başlayın; kodu keşif, extraction, pagination ve ölçekleme için kullanın.
Dört katmanlı modelin tamamı için bkz. Browser otomasyonunda blok yememek: 4 katmanlı savunma stack'i.
Koddan önce keşif
Scraper'ı hemen yazmak çoğu zaman yeniden yazmak demektir. 10 dakikalık keşif doğru stack'i seçtirir.
Anti-bot sistemini belirleyin
Hedef sitede DevTools açın ve response headers'ı kontrol edin.
| Header | Anti-bot sistemi |
|---|---|
cf-ray, server: cloudflare |
Cloudflare Bot Management |
x-akamai-transformed |
Akamai Bot Manager |
x-datadome |
DataDome |
x-px-* headers |
PerimeterX (now HUMAN) |
| Bunların hiçbiri | Muhtemelen ticari anti-bot yok veya özel çözüm var |
Korumasız site curl_cffi ile alınabilir; Cloudflare olan site managed fingerprints içeren gerçek browser ister.
API var mı bakın
Browser tabanlı scraper yazmadan önce Network sekmesinde XHR/Fetch filtreleyin. Birçok site veriyi JSON endpoint'ten çeker.
# If the site loads product data from an API endpoint
from curl_cffi import requests
response = requests.get(
"https://target-site.com/api/v2/products?category=electronics&page=1",Endpoint hızlıdır; ama korumalı siteler API çağrısının gerçek browser session içinden gelmesini bekleyebilir. Bu durumda sayfayı browser'da açıp response'u yakalamak daha güvenlidir.
Rendering modelini değerlendirin
JavaScript'i kapatın. İçerik duruyorsa HTTP yeter; boş sayfa kalıyorsa browser engine gerekir.
| JS olmadan içerik görünür mü? | Araç |
|---|---|
| Evet, tamamı render olur | curl_cffi or requests with TLS impersonation |
| Kısmen | curl_cffi for static parts, browser for dynamic |
| Hayır, boş sayfa | Full browser (Clawbrowser + Playwright/Puppeteer) |
Scraping stack'ini seçin
Doğru araç koruma düzeyine ve rendering'e bağlıdır. HTTP yeterken tam browser kaynak harcar; korumalı SPA'da HTTP zaman kaybettirir.
Karar ağacı
Anti-bot yok + server-rendered HTML: curl_cffi ve TLS impersonation kullanın.
from curl_cffi import requests
response = requests.get(
"https://unprotected-site.com/products",
impersonate="chrome136"Anti-bot yok + JavaScript-rendered: standart headless browser kullanın.
Anti-bot + server-rendered HTML: curl_cffi ve residential proxy kullanın.
Anti-bot + JavaScript-rendered: managed fingerprints ve residential proxy ile Clawbrowser kullanın.
from playwright.async_api import async_playwright
async def scrape_protected_site():
async with async_playwright() as p:
# Clawbrowser handles fingerprints, TLS and proxy at the engine levelClawbrowser yerel, ücretsiz, Chromium tabanlı bir anti-detect browser'dır; managed fingerprints, proxy routing, native CDP ve dahili MCP server içerir.
Veri çıkarma pattern'leri
Anti-bot katmanını geçince iş, sayfalardan stabil şekilde yapılandırılmış veri almaktır.
Pagination
Pagination genelde üç formda gelir.
URL tabanlı pagination
async def scrape_paginated(page, base_url, max_pages=50):
all_items = []
for page_num in range(1, max_pages + 1):
await page.goto(f"{base_url}?page={page_num}")
await human_delay(2000, 4000)Infinite scroll (scroll ile yüklenen içerik):
async def scrape_infinite_scroll(page, max_scrolls=30):
all_items = []
previous_count = 0
for _ in range(max_scrolls):"Load more" button:
async def scrape_load_more(page):
while True:
load_more = await page.query_selector('[data-testid="load-more"]')
if not load_more:
breakDinamik içeriği yönetme
Bazı veriler tıklama, accordion açma veya hover sonrası görünür.
async def extract_product_details(page, product_url):
await page.goto(product_url)
await human_delay(1000, 2000)
# Click "Specifications" tab to reveal hidden dataShadow DOM'dan çıkarma
Shadow DOM içindeki component'ler için shadow root içine girmeniz gerekir.
# Pierce through shadow DOM to extract data
data = await page.evaluate("""
() => {
const host = document.querySelector('product-card');
const shadow = host.shadowRoot;Scraping için session yönetimi
Scraper, gerçek kullanıcıdan çok daha fazla sayfa gezer. Session tutarlı görünmelidir.
Session warming
Hedef sayfadan başlamayın: home, kategori, cookie kabulü, sonra scraping. Davranış blokları şurada: Browser otomasyonunda blok yememek: 4 katmanlı savunma stack'i.
async def warm_session(page, site_url):
await page.goto(site_url)
await human_delay(2000, 4000)
# Accept cookies if banner appearsÖlçekte profil rotasyonu
Yükü birden fazla Clawbrowser profiline dağıtın; her profil kendi fingerprint, cookies, storage ve proxy ayarını taşır.
import asyncio
from playwright.async_api import async_playwright
async def scrape_batch(profile_name, urls):
async with async_playwright() as p:| Ölçek | Önerilen yaklaşım |
|---|---|
| < 100 pages/day | Single profile, residential proxy, 3-5s delays |
| 100-1,000 pages/day | 3-5 rotating profiles, sticky residential sessions |
| 1,000-10,000 pages/day | 10+ profiles, proxy pool, session warming |
| 10,000+ pages/day | Distributed setup, multiple Clawbrowser instances, backoff logic |
Blokları teşhis etme
Semptom genelde hangi katmanın kırıldığını gösterir.
| Semptom | Muhtemel neden | Çözüm |
|---|---|---|
| İlk request'te blok | IP reputation veya browser fingerprint | Residential proxy ve anti-detect browser kullanın |
| 5-10 sayfa sonra blok | Davranış veya session limiti | Yavaşlayın, delay ekleyin, session ısıtın |
| CAPTCHA on every page | Fingerprint leak | Browser is leaking automation signals, switch to managed fingerprints |
| 403 after proxy rotation | Browser fingerprint unchanged | New IP but same broken fingerprint, fix the browser layer |
| Local çalışır, production'da kalır | Datacenter IP | Production'a residential proxy ekleyin |
| Boş sayfa / sonsuz spinner | JavaScript challenge failed | Browser can't pass Cloudflare/Akamai JS check, needs real engine |
| Veri manuel ziyaretten farklı | Geo or locale mismatch | Proxy location doesn't match fingerprint timezone/language |
Hızlı teşhis script'i
import asyncio
from playwright.async_api import async_playwright
async def diagnose_blocking(target_url):
async with async_playwright() as p:Cloudflare korumalı siteleri scrape etmek
Cloudflare TLS, JavaScript, davranış ve IP reputation'ı birlikte değerlendirir.
Cloudflare neyi kontrol eder
- TLS fingerprint (JA3/JA4): ClientHello tutarsızsa HTML gelmeden challenge çıkar.
- JavaScript execution: Turnstile gerçek rendering ortamı ister.
- IP reputation: IP reputation milyonlarca site üzerinden ölçülür.
- Request patterns: Aynı session'dan tekrarlı request pattern'leri işaretlenir.
Workflow
Tüm katmanlar aynı anda temiz olmalı: TLS/JS için anti-detect browser, IP için residential proxy, timing için kod.
async def scrape_cloudflare_site(target_url, profile="cf-scraper"):
async with async_playwright() as p:
browser = await p.chromium.connect_over_cdp(
f"http://127.0.0.1:9222?profile={profile}"
)Cloudflare detayı için okuyun: Playwright script'lerinizin Cloudflare tarafından neden engellendiği.
AI agent scraping
Clawbrowser MCP server, AI agent'ların gerçek browser session'larını CDP üzerinden kontrol etmesini sağlar; fingerprints ve proxy routing aynı kalır.
Tam entegrasyon rehberi: AI agent'lar için CDP browser: geliştirici rehberi.
FAQ
Scraper neden localde çalışıp production'da bozulur?
Local makine residential IP kullanır; production çoğu zaman datacenter IP'dir. Residential proxy ekleyin ve managed fingerprints kontrol edin.
HTTP client mı browser mı kullanmalıyım?
Server-rendered ve korumasız sitede HTTP yeter. JavaScript rendering veya anti-bot challenge varsa tam browser kullanın.
Bir sitenin Cloudflare kullandığını nasıl anlarım?
DevTools Network içinde cf-ray veya server: cloudflare header'larını arayın.
Proxy olmadan scrape edebilir miyim?
Korumasız sitelerde evet. Cloudflare/Akamai arkasında ve ölçekte genelde residential proxies gerekir.
Tespit edilmeden web scraping'e başlayın
Güvenilir scraping; keşif, doğru araç ve temiz browser altyapısı ile başlar.
Install Clawbrowser ile browser identity ve network katmanlarını yönetin: kurulum prompt'unu clawbrowser.ai üzerinden kopyalayıp AI agent'ınıza yapıştırın. Setup iki dakikadan kısa sürer.
Detection modeli için bkz. Browser otomasyonunda blok yememek: 4 katmanlı savunma stack'i. Fingerprinting detayları için bkz. Browser fingerprinting: anti-bot sistemlerin kullandığı 20+ sinyal.
Continue exploring
Ask AI how Clawbrowser helps
Okumaya devam edin
İlgili yazılar

Tarayıcı Otomasyonunda Engellenmemek: 4 Katmanlı Savunma Mimarisi
Anti-bot sistemler otomasyonu dört katmandan tespit eder: fingerprint, ağ, davranış ve oturum. Her katmanı nasıl düzelteceğinizi gösteren yapısal rehber.
Yazıyı oku →
Puppeteer-Extra-Stealth Artık Geçersiz: Modern Otomasyon Ne Kullanıyor
puppeteer-extra-plugin-stealth 2023'ten beri güncellenmedi. Modern Anti-Bot sistemlerine karşı neden başarısız olduğunu ve yerine ne kullanmanız gerektiğini anlatıyoruz.
Yazıyı oku →