AI modellerinin eğitimi büyük miktarda veriye ihtiyaç duyar — metinler, görüntüler, videolar, web sitelerinden yapılandırılmış bilgiler. Sorun şu ki, toplu tarama yapıldığında web siteleri IP adreslerini hızla engeller, bu da bot etkinliği olarak değerlendirilir. Bu makalede, proxy üzerinden veri toplamanın nasıl doğru bir şekilde organize edileceğini, farklı görevler için hangi IP türünün seçileceğini ve istikrarlı bir çalışma için altyapının nasıl ayarlanacağını inceleyeceğiz.
AI eğitimi için neden proxy gerekir
Modern dil modelleri, GPT, LLaMA veya Claude gibi, milyarlarca metin tokeni üzerinde eğitilmektedir. Görüntü işleme modelleri, on milyonlarca görüntüye ihtiyaç duyar. Öneri sistemleri, binlerce web sitesinde kullanıcı davranışlarını analiz eder. Tüm bu verileri bir yerden elde etmemiz gerekiyor.
Ana sorun, web sitelerinin toplu taramaya karşı aktif olarak korunmasıdır. Eğer bir IP adresinden dakikada 100'den fazla istek gönderirseniz, 5-10 dakika içinde engellenirsiniz. Engellemelerin nedenleri:
- Hız sınırlaması: bir IP'den gönderilen istek sayısının sınırlandırılması (genellikle dakikada 10-60 istek)
- Anti-bot sistemleri: Cloudflare, Akamai, PerimeterX davranışı analiz eder ve şüpheli etkinlikleri engeller
- Coğrafi kısıtlamalar: bazı içerikler yalnızca belirli ülkelerden erişilebilir
- Rekabet koruması: pazar yerleri ve toplayıcılar, fiyat ve ürünlerin toplu olarak toplanmasını engeller
Proxy'ler bu sorunu çözer, istekleri binlerce farklı IP adresi üzerinden dağıtarak. Tek bir IP'den 1000 istek yerine, 500-1000 farklı adresten 1-2 istek yaparsınız — bu, normal kullanıcıların etkinliği gibi görünür.
Veri toplamak için hangi proxy türünü seçmelisiniz
AI eğitimi için üç tür proxy kullanılır, her birinin kendi avantajları ve sınırlamaları vardır. Seçim, veri kaynağına, hacimlere ve proje bütçesine bağlıdır.
| Proxy Türü | Hız | Web Siteleri Güvenilirliği | Maliyet | Ne Zaman Kullanılmalı |
|---|---|---|---|---|
| Datacenter | 100-1000 Mbit/s | Düşük | $0.5-2/IP | Açık API'ler, korumasız basit siteler |
| Residential | 10-50 Mbit/s | Yüksek | $5-15/GB | Sosyal medya, Cloudflare ile siteler, e-ticaret |
| Mobile | 5-30 Mbit/s | Çok yüksek | $10-30/GB | Mobil uygulamalar, sıkı koruma |
Datacenter proxy: büyük hacimler için hız
Datacenter proxy'leri, bulut sağlayıcılar (AWS, Google Cloud, Hetzner) üzerindeki sunucuların IP adresleridir. Ana avantajı — hız ve düşük maliyet. Bir datacenter IP, saniyede yüzlerce isteği işleyebilir.
Agresif koruma kullanmayan kaynaklardan veri toplamak için uygundur: açık API'ler (GitHub, Wikipedia, Stack Overflow), devlet veri tabanları, Cloudflare kullanmayan haber siteleri, bilimsel yayınlar. Eğer bir web sitesi verileri JavaScript ile render etmiyorsa ve tarayıcı parmak izini kontrol etmiyorsa — datacenter proxy'ler iş görecektir.
Dezavantajı — birçok web sitesi datacenter IP'lerini kara listeye alır. Instagram, Facebook, Google Arama, büyük pazar yerleri datacenter IP'lerini hemen hemen anında engeller. Bu tür kaynaklar için residential proxy'ler gereklidir.
Residential proxy: her türlü korumayı aşma
Residential proxy'ler, gerçek ev kullanıcılarının IP adreslerini kullanır. Bir web sitesi için bu istek, evden gelen normal bir ziyaretçi gibi görünür. Bu, Cloudflare, Akamai'yi aşmayı ve sosyal medya ile korumalı platformlardan veri toplamayı sağlar.
Residential proxy'ler, Instagram, Facebook, Twitter/X (paylaşımlar, yorumlar, profillerin toplanması), Google Arama (NLP modelleri için arama sonuçlarının taranması), pazar yerleri (Amazon, eBay, Wildberries — ürünler, yorumlar, fiyatlar), coğrafi kısıtlamaları olan siteler (içerik yalnızca belirli ülkelerden erişilebilir) için gereklidir.
Maliyeti daha yüksektir — trafik için ödeme ($5-15 GB başına). Tasarruf sağlamak için residential proxy'leri yalnızca kritik kaynaklar için kullanın, basit siteleri datacenter üzerinden tarayın.
Mobile proxy: mobil uygulamalar için
Mobil proxy'ler, mobil operatörlerin IP'lerini (4G/5G) kullanır. Nadiren gereklidir — genellikle mobil uygulamalardan (TikTok, Instagram uygulaması, mobil oyunlar) veri toplamak için veya bir web sitesi mobil ve masaüstü trafiği ayırıyorsa.
Mobil IP'lerin avantajı — operatörler CGNAT kullanır (bir IP yüzlerce kullanıcıya aittir), bu nedenle bu tür adresleri engellemek kârlı değildir. Ancak çoğu AI eğitim görevi için residential proxy'ler yeterlidir.
Veri kaynakları türleri ve proxy gereksinimleri
Farklı veri türleri, proxy'lere farklı bir yaklaşım gerektirir. AI modellerinin eğitimi için popüler kaynakları inceleyelim.
NLP modelleri için metin verileri
Dil modellerinin eğitimi için haber sitelerinden, forumlardan, bloglardan, sosyal medyadan, Wikipedia ve özel kaynaklardan metinler toplanır. Hacimler — on terabayt metin.
Proxy önerisi: Haber siteleri ve bloglar — datacenter (hız daha önemli). Reddit, Quora gibi forumlar — residential (rate limiting var). Twitter, Facebook, Instagram — yalnızca her 5-10 dakikada bir döngü ile residential.
Metin taramanın özelliği — yapıyı korumak gerekir (başlıklar, paragraflar, meta veriler). JavaScript siteleri için headless tarayıcılar (Puppeteer, Playwright) veya statik sayfalar için basit HTTP istemcileri (requests, axios) kullanın.
Görüntüler için bilgisayarla görme
Tanıma modellerinin eğitimi, etiketlenmiş milyonlarca görüntü gerektirir. Kaynaklar: Google Görseller, Pinterest, Instagram, özel fotoğraf stokları, e-ticaret siteleri (ürün fotoğrafları).
Sorun — görüntüler çok yer kaplar (ortalama boyut 200-500 KB), bu nedenle trafik hızla tükenir. Residential proxy kullanıldığında (GB başına ödeme) bu kritik hale gelir. Optimizasyon stratejisi: önce residential üzerinden görüntülerin URL'lerini toplayın, ardından dosyaları datacenter veya doğrudan (eğer CDN referans kontrol etmiyorsa) indirin.
E-ticaret ile yapılandırılmış veriler
Ürünler, fiyatlar, yorumlar hakkında veriler, öneri sistemleri ve fiyatlandırma modellerinin eğitimi için kullanılır. Kaynaklar: Amazon, eBay, Wildberries, Ozon, AliExpress.
Tüm büyük pazar yerleri Cloudflare veya kendi anti-bot sistemlerini kullanır. Kesinlikle döngü ile residential proxy gereklidir. Ayrıca doğru tarayıcı parmak izi önemlidir — otomasyonu gizlemek için puppeteer-extra-plugin-stealth gibi araçlar kullanın.
Video ve ses verileri
YouTube, TikTok, podcast platformları — ses ve video tanıma modellerinin eğitimi için kaynaklardır. Sorun — devasa trafik (bir video = yüzlerce MB). Bu tür görevler için residential proxy'ler ekonomik olarak uygun değildir.
Çözüm: residential'i yalnızca meta verileri ve video bağlantılarını almak için kullanın, indirme işlemini datacenter veya özel araçlar (YouTube kısıtlamalarını aşabilen yt-dlp gibi) üzerinden gerçekleştirin.
Farklı hacimler için IP döngü stratejileri
IP döngüsü — istikrarlı tarama için kritik bir noktadır. Yanlış ayarlama, ya engellemelere ya da trafik için fazla ödeme yapmanıza neden olur.
İstek başına döngü (döngüsel proxy)
Her istek yeni bir IP üzerinden gider. Farklı web sitelerinin toplu taraması için uygundur, oturumu korumaya gerek yoktur. Örneğin, 10,000 farklı haber sitesinden metin toplamak — her site yalnızca 1-2 istek görür.
import requests
# Döngüsel proxy - her istek yeni bir IP
proxies = {
'http': 'http://username:password@rotating.proxycove.com:12345',
'https': 'http://username:password@rotating.proxycove.com:12345'
}
urls = ['https://site1.com', 'https://site2.com', ...]
for url in urls:
response = requests.get(url, proxies=proxies)
# Her istek yeni bir IP ile gider
parse_data(response.text)
Avantajı — engellemelere karşı maksimum koruma. Dezavantajı — oturum açma veya çerezleri korumayı gerektiren web siteleri ile çalışmak mümkün değildir.
Zamana göre döngü (yapışkan oturumlar)
IP 5-30 dakika boyunca korunur, ardından değiştirilir. Bir web sitesinin sayfalandığı tarama için uygundur, sayfalar arasında 1, 2, 3... geçiş yaparken oturumu korumak gerekir.
import requests
import time
# Yapışkan oturum - IP 10 dakika korunur
session_id = generate_random_string() # oturum için benzersiz ID
proxies = {
'http': f'http://username-session-{session_id}:password@sticky.proxycove.com:12345'
}
# 10 dakika boyunca tüm istekler aynı IP üzerinden gider
for page in range(1, 100):
url = f'https://site.com/catalog?page={page}'
response = requests.get(url, proxies=proxies)
parse_page(response.text)
time.sleep(2) # istekler arasında gecikme
Oturum süresini web sitesinin hız sınırlamasına göre ayarlayın. Eğer limit dakikada 60 istek ise, oturumu 1-2 dakika ayarlayın ve 50'den fazla istek yapmayın.
Statik IP havuzu
100-1000 IP'den oluşan bir liste alırsınız ve isteklerin dağıtımını kendiniz yönetirsiniz. Tam kontrol gerektiğinde karmaşık senaryolar için uygundur: web sitesinin farklı bölümlerinin paralel taraması, yük dengelemesi, özel döngü mantığı.
import requests
from itertools import cycle
# 500 statik IP havuzu
ip_pool = [
'http://user:pass@ip1.proxycove.com:12345',
'http://user:pass@ip2.proxycove.com:12345',
# ... 500 adres
]
proxy_cycle = cycle(ip_pool)
for url in urls:
proxy = next(proxy_cycle) # havuzdan bir sonraki IP'yi al
response = requests.get(url, proxies={'http': proxy, 'https': proxy})
parse_data(response.text)
Bu yaklaşım maksimum esneklik sağlar, ancak hataları işlemek için daha fazla kod gerektirir (eğer IP engellenirse, havuzdan çıkarmak gerekir).
Tarama sırasında anti-bot sistemlerini aşma
Proxy'ler IP engellemeleri sorununu çözer, ancak modern web siteleri botları belirlemek için birçok parametreyi analiz eder. Residential IP ile bile, tarayıcı parmak izi otomasyonu gösteriyorsa engellenebilirsiniz.
Anti-bot sistemlerinin kontrol ettikleri
- User-Agent: gerçek bir tarayıcıya (Chrome, Firefox) uygun olmalı, "headless" veya "bot" kelimelerini içermemelidir
- Headers: başlık seti, tarayıcı için tipik olmalıdır (Accept, Accept-Language, Accept-Encoding, Referer)
- TLS parmak izi: SSL bağlantı parametreleri tarayıcılar ve scriptler arasında farklılık gösterir
- JavaScript parmak izi: WebGL, Canvas, AudioContext, fontlar, eklentiler, ekran çözünürlüğü
- Davranış: fare hareketleri, kaydırma hızı, tıklamalar (JavaScript ile render edilen siteler için)
Otomasyonu gizlemek için araçlar
Gelişmiş korumaları aşmak için headless tarayıcılar ve gizleme eklentileri kullanın:
// Puppeteer ile gizleme eklentisi
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());
const browser = await puppeteer.launch({
headless: true,
args: [
'--proxy-server=http://username:password@residential.proxycove.com:12345',
'--disable-blink-features=AutomationControlled'
]
});
const page = await browser.newPage();
// Gerçekçi bir görünüm ayarlıyoruz
await page.setViewport({ width: 1920, height: 1080 });
// Rastgele gecikmeler ekliyoruz
await page.goto('https://protected-site.com');
await page.waitForTimeout(2000 + Math.random() * 3000);
const data = await page.evaluate(() => {
return document.querySelector('.data').innerText;
});
await browser.close();
Python için benzer ayarlarla Playwright veya otomatik olarak ChromeDriver'ı gizlemek için undetected-chromedriver kütüphanesini kullanın.
Cloudflare ve diğer WAF'leri aşma
Cloudflare, tarayıcıyı kontrol etmek için JavaScript zorluğu kullanır. Basit HTTP istemcileri (requests, axios) bunu geçemez. Çözümler:
- Headless tarayıcı: Puppeteer/Playwright gizleme eklentisi ile çoğu zorluğu geçer
- Hazır çözümler: cloudscraper (Python) veya puppeteer-extra-plugin-recaptcha gibi kütüphaneler
- Aşma hizmetleri: özel API'ler (FlareSolverr, Anti-Captcha) zorlukları sizin için çözer
Önemli: doğru parmak izi ile bile, istekler arasında duraklamalar yapın. Mükemmel bir tarayıcı parmak izi ile saniyede 100 istek göndermek yine de şüpheli görünür. Optimal hız — bir IP'den dakikada 10-30 istek.
Veri toplama altyapısının mimarisi
AI eğitimi için veri toplarken endüstriyel ölçekte düşünülmüş bir mimari gereklidir. Tek bir sunucudaki basit bir script, terabaytlarca veriyi taramakta yetersiz kalır.
Veri toplama sisteminin bileşenleri
1. Görev Kuyruğu (Task Queue)
Tarama için URL listesini saklar. Redis, RabbitMQ veya AWS SQS kullanın. Görevleri işçiler arasında dağıtmayı ve düşen görevleri yeniden vermeyi sağlar.
2. İşçiler (Workers)
Kuyruktan görev alan ve tarama yapan süreçlerdir. Farklı sunucularda 10-100 işçiyi paralel olarak çalıştırın. Her işçi kendi proxy'sini veya proxy havuzunu kullanır.
3. Veri Depolama (Storage)
Toplanan verilerin saklandığı yerdir. Metinler için — S3/MinIO (nesne depolama). Yapılandırılmış veriler için — PostgreSQL veya MongoDB. Büyük hacimler için — veri göleti (AWS S3 + Athena, Google Cloud Storage).
4. İzleme (Monitoring)
Tarama hızını, hata oranını, trafik tüketimini izleme. Grafana + Prometheus veya Datadog gibi hazır çözümleri kullanın. Kritik metrikler için alarmlar ayarlayın (hata oranı >%10, hız iki katına düştü).
Python ile mimari örneği
# worker.py - tarama süreci
import redis
import requests
import json
from datetime import datetime
# Redis'e bağlanma (görev kuyruğu)
queue = redis.Redis(host='redis-server', port=6379)
# Proxy havuzu
proxies_pool = load_proxies_from_config()
while True:
# Kuyruktan bir görev al
task = queue.blpop('parsing_queue', timeout=5)
if not task:
continue
url = task[1].decode('utf-8')
proxy = get_next_proxy(proxies_pool)
try:
response = requests.get(
url,
proxies={'http': proxy, 'https': proxy},
timeout=30,
headers={'User-Agent': get_random_user_agent()}
)
# Verileri tarayın
data = parse_html(response.text)
# S3'e kaydedin
save_to_s3(data, f'data/{datetime.now().isoformat()}/{hash(url)}.json')
# Başarıyı kaydedin
log_success(url, proxy)
except Exception as e:
# Hata durumunda görevi kuyruğa geri gönder
queue.rpush('parsing_queue', url)
log_error(url, proxy, str(e))
mark_proxy_as_failed(proxy)
Bu mimari, yatay olarak ölçeklenmeyi sağlar — sadece yeni işçi sunucuları ekleyin. Bir işçi düştüğünde diğerleri çalışmaya devam eder.
Otomatik veri toplama araçları
Endüstriyel tarama için, kutudan çıkar çıkmaz tipik görevleri çözen özel çerçeveler kullanılır.
Scrapy — Python için çerçeve
Scrapy — Python'da web scraping için en popüler araçtır. Kutudan çıkar çıkmaz destekler: paralel tarama (yüzlerce isteği aynı anda), hatalarda otomatik yeniden deneme, proxy ve User-Agent döngüsü için middleware, JSON, CSV, XML, veritabanlarına dışa aktarma.
# settings.py - proxy ile Scrapy ayarı
ROTATING_PROXY_LIST = [
'http://user:pass@proxy1.proxycove.com:12345',
'http://user:pass@proxy2.proxycove.com:12345',
# ... proxy listesi
]
DOWNLOADER_MIDDLEWARES = {
'rotating_proxies.middlewares.RotatingProxyMiddleware': 610,
'rotating_proxies.middlewares.BanDetectionMiddleware': 620,
}
# Paralellik
CONCURRENT_REQUESTS = 100
DOWNLOAD_DELAY = 0.5 # istekler arası gecikme
Scrapy, statik siteler için uygundur (JavaScript olmadan HTML). Dinamik siteler için Scrapy + Splash (headless tarayıcı) kullanın veya Playwright'a geçin.
Crawlee — Node.js için çerçeve
Crawlee (eski adıyla Apify SDK) — JavaScript için Scrapy benzeri bir çerçevedir. Avantajı — Puppeteer ve Playwright ile yerel çalışma, yerleşik proxy döngüsü, otomatik görev yönetimi, hatalarda yavaşlayan adaptif tarama hızı.
import { PlaywrightCrawler, ProxyConfiguration } from 'crawlee';
const proxyConfiguration = new ProxyConfiguration({
proxyUrls: [
'http://user:pass@proxy1.proxycove.com:12345',
'http://user:pass@proxy2.proxycove.com:12345',
],
});
const crawler = new PlaywrightCrawler({
proxyConfiguration,
maxConcurrency: 50,
requestHandler: async ({ page, request }) => {
await page.waitForSelector('.data');
const data = await page.$$eval('.item', items =>
items.map(item => ({
title: item.querySelector('h2').innerText,
price: item.querySelector('.price').innerText
}))
);
await saveData(data);
},
});
await crawler.run(['https://site.com/catalog']);
Apache Nutch — ölçekli tarama için
Tüm internetten veri toplamanız gerekiyorsa (arama motorları gibi), Apache Nutch kullanın. Bu, Hadoop üzerinde çalışan dağıtılmış bir tarayıcıdır. Petabaytlarca veriyi işleyebilir, bağlantılar üzerinden yeni sayfaları otomatik olarak keşfeder, tarama politikalarını destekler (robots.txt, sitemap.xml).
Nutch, ayarlaması daha karmaşık, ancak Common Crawl benzeri veri setlerini toplamak için vazgeçilmezdir. Proxy ile çalışmak için proxy-rotator eklentisini kullanın.
Hız ve maliyet optimizasyonu
AI eğitimi için veri toplamak — maliyetli bir iştir. Terabayt hacimlerinde proxy'ler için harcamalar aylık on binlerce dolara ulaşabilir. Kaliteden ödün vermeden maliyetleri nasıl optimize edeceğimizi inceleyelim.
Proxy türlerini birleştirin
Tüm görevler için residential kullanmayın. Kaynakları üç kategoriye ayırın:
- Korumasız: datacenter proxy ($0.5-2/IP) — açık API'ler, basit siteler, devlet veri tabanları
- Orta koruma: residential döngü ($5-10/GB) — Cloudflare ile haber siteleri, forumlar
- Yüksek koruma: residential yapışkan oturumlar ($10-15/GB) — sosyal medya, pazar yerleri
Örnek: 100 haber sitesini tarıyorsunuz. Bunların 70'i Cloudflare kullanmıyor — datacenter kullanın. 30'u korumalı — residential. Tasarruf %60-70 proxy bütçesinde olacaktır.
İstekleri önbelleğe alın
Bir web sitesini birkaç kez tarıyorsanız (örneğin, günlük haber toplama), değişmeyen sayfaları önbelleğe alın. HTML önbelleği için Redis veya yerel depolama kullanın.
import hashlib
import redis
cache = redis.Redis(host='localhost', port=6379)
def fetch_with_cache(url, proxies):
# Önbelleği kontrol et
cache_key = hashlib.md5(url.encode()).hexdigest()
cached = cache.get(cache_key)
if cached:
return cached.decode('utf-8')
# Eğer önbellekte yoksa - istek yap
response = requests.get(url, proxies=proxies)
html = response.text
# 24 saat boyunca önbelleğe al
cache.setex(cache_key, 86400, html)
return html
Trafiği optimize edin
Residential proxy kullanırken (GB başına ödeme) trafik hacmini azaltmak kritik öneme sahiptir:
- Gerekmedikçe görüntülerin, CSS'nin, fontların yüklenmesini kapatın (Puppeteer'de: page.setRequestInterception)
- Compression (gzip, brotli) kullanın — çoğu proxy bunu destekler
- Sadece gerekli öğeleri tarayın — bir bloğa ihtiyacınız varsa tüm sayfayı indirmeyin
- API'ler için HTML yerine JSON kullanın (trafikte 5-10 kat azalma)
Yükü zamana yayarak dağıtın
Birçok web sitesi gün boyunca farklı yükler taşır. Gece saatlerinde (web sitesinin sunucu saatine göre) tarama yapın — hız sınırlamasına takılma olasılığınız daha düşük olur. Ayrıca hafta sonlarını da dikkate alın — Cumartesi-Pazar koruma daha zayıf olabilir.
Metrikleri izleyin
Optimizasyon için anahtar göstergeleri izleyin:
| Metrik | Norm | Sapma durumunda ne yapılmalı |
|---|---|---|
| Başarı oranı | >90% | Gecikmeleri artırın, proxy türünü değiştirin |
| Ortalama hız | İşçi başına 50-200 req/dk | Daha fazla işçi veya proxy ekleyin |
| 1000 kayıt başına maliyet | $0.5-5 | Trafiği optimize edin, datacenter kullanın |
| Çift kayıt oranı | <5% | Deduplication'ı iyileştirin, tarama mantığını kontrol edin |
Sonuç
AI modellerinin eğitimi için veri toplamak, doğru proxy seçimi, döngü ayarı, korumaları aşma ve maliyet optimizasyonu gerektiren karmaşık bir görevdir. Anahtar noktalar:
- Basit kaynaklar için (API, korumasız siteler) datacenter proxy kullanın — hızlı ve ucuzdur
- Korumalı platformlar için (sosyal medya, pazar yerleri, Cloudflare ile siteler) residential proxy gereklidir
- Göreve bağlı olarak döngüyü ayarlayın: toplu tarama için istek başına, tek bir web sitesi ile çalışmak için yapışkan oturumlar
- Anti-bot sistemlerini aşmak için gizleme eklentileri ile headless tarayıcılar kullanın
- Görev kuyrukları ve paralel işçiler ile ölçeklenebilir bir mimari inşa edin
- Harcamaları optimize edin: proxy türlerini birleştirin, istekleri önbelleğe alın, trafiği azaltın
Doğru ayarlarla, terabaytlarca veriyi istikrarlı ve ekonomik bir şekilde toplayabilirsiniz. 10-20 kaynaktan küçük bir pilot projeyle başlayın, süreci ayarlayın, ardından endüstriyel hacimlere ölçeklendirin.
Koruma gerektiren platformlardan veri toplamayı planlıyorsanız (sosyal medya, e-ticaret, anti-bot sistemleri olan siteler), residential proxy'leri kullanmanızı öneririz — yüksek güvenilirlik ve minimum engelleme oranı sağlarlar. Basit kaynaklar ve API'ler için yeterli olan datacenter proxy'leri ise yüksek hız ve düşük maliyet sunar.