Tek bir IP'den binlerce istek gönderirseniz, hedef site sizi dakikalar içinde CAPTCHA duvarına çarptırır. Proxy rotasyonu bu duvarı tamamen kaldırmaz; yalnızca ne sıklıkta göründüğünü düşürür. Çıkan doğrulamaları ise CaptchaAI API ile çözersiniz. Bu iki katman birlikte çalıştığında kazıma hattınız üretimde kararlı kalır.
Kısaca: proxy rotasyonu CAPTCHA'ları seyrekleştirmek, CaptchaAI ise kalanları çözmek içindir. İkisi birbirinin yerine geçmez; yan yana çalışır.
Proxy rotasyonu CAPTCHA'ları nasıl seyrekleştirir?
Siteler CAPTCHA'ları büyük ölçüde IP başına istek desenine bakarak devreye sokar. Trafiği bir havuza dağıttığınızda hiçbir IP eşiği aşmaz ve doğrulama daha seyrek çıkar:
| Faktör | Tek IP | Proxy rotasyonu |
|---|---|---|
| Dakika başına istek | 10+ istek CAPTCHA tetikler | Havuzdaki IP'lere dağılır |
| IP itibarı | Zamanla düşer | Havuzdan taze IP'ler devreye girer |
| Oturum deseni | Şüpheli desen açıkça görünür | Desenler IP'lere yayılır |
| Coğrafi tutarlılık | Tek konum | Doğal coğrafi çeşitlilik |
Hangi proxy türü hangi hedefe uygun?
| Tür | En uygun | CAPTCHA oranı | Maliyet |
|---|---|---|---|
| Yerleşik | Yüksek değerli hedefler (Google, Amazon) | En düşük | $$$ |
| Mobil | Çok düşük algılanma | En düşük | $$$$ |
| ISP/Statik | Uzun süreli oturumlar | Düşük | $$ |
| Veri merkezi | Yüksek hacim, hoşgörülü siteler | Daha yüksek | $ |
Seçimi hedefin ne kadar agresif korunduğuna göre yapın:
- Agresif CAPTCHA tetikleyen, yüksek değerli hedeflerde yerleşik proxy'ler belirgin biçimde daha az doğrulama üretir.
- Daha hoşgörülü sitelerde veri merkezi proxy'leri hem yeterli hem de en ekonomik seçenektir.
Yerel senaryo: e-ticaret fiyat izleme QA akışı
Türkiye'deki bir e-ticaret ekibinin, rakip fiyatlarını yetkili bir QA akışında izlediğini düşünün. Tek bir veri merkezi IP'siyle bu iş kısa sürede engellenir; istekleri farklı coğrafyalardaki proxy'lere yayıp çıkan CAPTCHA'ları CaptchaAI ile çözmek akışı kararlı tutar. Kazıdığınız veride kişisel bilgi varsa KVKK yükümlülüklerini de unutmayın — proxy kullanmak bu sorumluluğu ortadan kaldırmaz; kazımayı yetkili veri toplama akışlarıyla sınırlayın.
Temel proxy rotasyonu (Python)
En basit yaklaşım, her istekte havuzdan rastgele bir proxy seçmektir. Aşağıdaki örnek proxy'yi seçer, isteği gönderir ve sayfada reCAPTCHA belirirse token'ı CaptchaAI ile alıp geri enjekte eder:
import requests
import random
import time
PROXIES = [
"http://user:pass@proxy1.example.com:8080",
"http://user:pass@proxy2.example.com:8080",
"http://user:pass@proxy3.example.com:8080",
]
API_KEY = "YOUR_API_KEY"
def get_random_proxy():
proxy = random.choice(PROXIES)
return {"http": proxy, "https": proxy}
def scrape_with_rotation(url):
proxy = get_random_proxy()
session = requests.Session()
session.proxies = proxy
session.headers.update({
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
})
resp = session.get(url)
# If CAPTCHA appears, solve it
if "g-recaptcha" in resp.text or "captcha" in resp.text.lower():
from bs4 import BeautifulSoup
soup = BeautifulSoup(resp.text, "html.parser")
rc = soup.find("div", class_="g-recaptcha")
if rc:
site_key = rc["data-sitekey"]
token = solve_captcha(site_key, url)
resp = session.post(url, data={"g-recaptcha-response": token})
return resp.text
def solve_captcha(site_key, page_url):
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY, "method": "userrecaptcha",
"googlekey": site_key, "pageurl": page_url
})
task_id = resp.text.split("|")[1]
for _ in range(60):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id
})
if result.text == "CAPCHA_NOT_READY": continue
if result.text.startswith("OK|"): return result.text.split("|")[1]
raise Exception(result.text)
raise TimeoutError()
Akıllı proxy rotasyonu: CAPTCHA oranına göre seçim
Rastgele seçim iş görür ama körlemesine çalışır. Hangi proxy'lerin daha çok CAPTCHA tetiklediğini kaydedip başarı oranı yüksek olanlara ağırlık vermek, uzun oturumlarda çıkan CAPTCHA sayısını gözle görülür biçimde düşürür:
from collections import defaultdict
import random
class SmartProxyRotator:
def __init__(self, proxies):
self.proxies = proxies
self.captcha_count = defaultdict(int)
self.success_count = defaultdict(int)
def get_proxy(self):
# Prefer proxies with lower CAPTCHA rates
scored = []
for proxy in self.proxies:
total = self.captcha_count[proxy] + self.success_count[proxy]
if total == 0:
score = 0.5 # Unknown proxy, neutral score
else:
score = self.success_count[proxy] / total
scored.append((proxy, score))
# Weight selection by score
scored.sort(key=lambda x: x[1], reverse=True)
top_proxies = scored[:max(len(scored) // 2, 1)]
proxy = random.choice(top_proxies)[0]
return proxy
def report_success(self, proxy):
self.success_count[proxy] += 1
def report_captcha(self, proxy):
self.captcha_count[proxy] += 1
# Usage
rotator = SmartProxyRotator(PROXIES)
def scrape(url):
proxy = rotator.get_proxy()
resp = requests.get(url, proxies={"http": proxy, "https": proxy})
if "captcha" in resp.text.lower():
rotator.report_captcha(proxy)
# Solve CAPTCHA...
else:
rotator.report_success(proxy)
return resp.text
Bu puanlama, CAPTCHA tetikleyen bir proxy'yi tamamen atmaz; yalnızca seçilme olasılığını düşürür. Böylece geçici olarak yorulmuş bir IP, itibarı toparlandıkça havuza geri döner. Uzun soluklu işlerde bu yaklaşım hem çıkan CAPTCHA sayısını hem de toplam API maliyetini azaltır.
Selenium ile proxy rotasyonu
Tarayıcı tabanlı kazımada proxy'yi oturum başına atarsınız. Chrome seçeneklerine --proxy-server bayrağını ekleyip her yeni sürücü için havuzdan bir proxy seçin:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
def create_driver_with_proxy(proxy_url):
options = Options()
options.add_argument(f"--proxy-server={proxy_url}")
options.add_argument("--no-sandbox")
return webdriver.Chrome(options=options)
# Rotate proxy per session
proxy = random.choice(PROXIES)
driver = create_driver_with_proxy(proxy)
driver.get("https://example.com")
Cloudflare için proxy + CAPTCHA çözümü
Cloudflare doğrulama akışını çözerken CaptchaAI'ye proxy'yi de iletmeniz gerekir. Dönen qa_session_cookie çerezi IP'ye bağlı olduğundan, sonraki istekleri aynı proxy üzerinden yapın:
proxy = "http://user:pass@proxy.example.com:8080"
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY,
"method": "cloudflare_challenge",
"pageurl": "https://example.com",
"proxy": proxy,
"proxytype": "HTTP"
})
task_id = resp.text.split("|")[1]
# Poll for qa_session_cookie cookie
# Use the same proxy for subsequent requests
Sık karşılaşılan sorunlar ve çözümleri
| Sorun | Çözüm |
|---|---|
| Tüm proxy'ler CAPTCHA tetikliyor | Yerleşik proxy'lere geçin ve istek oranını düşürün |
| Proxy zaman aşımı hataları | Yavaş proxy'leri havuzdan çıkarın; zaman aşımı süresini artırın |
| Proxy'ye göre farklı içerik | Bazı siteler coğrafyaya özel içerik döndürür; yanıtı normalleştirin |
| Token proxy ile çalışmıyor | Token'ın aynı oturumdan ve IP'den kullanıldığından emin olun |
Sahada işe yarayan uygulamalar
Aşağıdaki alışkanlıklar, rotasyonun sağladığı kazancı üretimde kalıcı hale getirir:
- Proxy coğrafyasını hedefe eşleyin: ABD sitelerine ABD IP'leriyle, Avrupa hedeflerine bölge içi IP'lerle gidin.
- Her proxy için tek oturum kullanın: oturumları farklı proxy'ler arasında paylaştırmayın.
- Proxy başına hız sınırı koyun: IP başına dakikada en fazla 5–10 istek gönderin.
- CAPTCHA oranını izleyin: hangi proxy'nin daha çok CAPTCHA tetiklediğini takip edin.
- Çok adımlı akışlarda oturumu koruyun: aynı iş akışı boyunca proxy'yi değiştirmeyin.
- Proxy hatalarını yönetin: bağlantı hatasında farklı bir proxy ile yeniden deneyin.
Sık sorulan sorular
Proxy rotasyonu CAPTCHA görülme sıklığını gerçekten azaltır mı?
Evet. Siteler CAPTCHA'ları çoğunlukla IP başına istek yoğunluğuna göre tetikler; istekleri bir havuza yaydığınızda hiçbir IP eşiği aşmaz ve doğrulama daha seyrek çıkar. Yine de çıkan CAPTCHA'lar için bir çözüm katmanına ihtiyacınız olur.
Cloudflare çözümünde neden aynı proxy'yi kullanmam gerekir?
qa_session_cookie çerezi oluşturulduğu IP'ye bağlıdır. Çerezi bir proxy ile alıp isteği başka bir IP'den gönderirseniz Cloudflare oturumu geçersiz sayar. Diğer CAPTCHA türlerinde token IP'den bağımsızdır; orada aynı proxy zorunlu değildir.
Yerleşik proxy mi yoksa veri merkezi proxy mi seçmeliyim?
Agresif korumalı, yüksek değerli hedeflerde yerleşik proxy'ler daha az CAPTCHA tetikler. Daha hoşgörülü sitelerde veri merkezi proxy'leri hem yeterli hem de daha ucuzdur. CaptchaAI thread tabanlı çalıştığı için çözüm maliyeti proxy türünden bağımsızdır (BASIC $15/ay, 5 thread).
Türkiye'den veri kazırken KVKK'ya dikkat etmeli miyim?
Kazıdığınız veride kişisel bilgi varsa evet. Proxy kullanmak veriyi anonimleştirmez; KVKK yükümlülükleri toplanan içeriğe göre belirlenir. Kişisel veri içeren kaynaklarda kazımayı yetkili QA ve veri toplama akışlarıyla sınırlayın.