Bloga geri dön

Wildberries, Ozon ve Avito API'lerine Sık Yapılan Taleplerde Engellemeyi Nasıl Önlersiniz?

API pazar yerlerinin fiyat ve stok verilerini parse ederken blokaj nedenlerini inceliyoruz, stabil çalışmak için proxy, gecikme ve başlıkların nasıl doğru ayarlanacağını gösteriyoruz.

📅30 Ocak 2026
```html

Eğer rakip fiyatlarını izliyorsanız, ürün stoklarını parse ediyorsanız veya pazar yerlerinde otomatik ilan veriyorsanız — muhtemelen engellerle karşılaşmışsınızdır. Wildberries, Ozon, Yandex.Market ve Avito API'leri otomasyona karşı aktif olarak korunmaktadır: istek sayısını sınırlar, IP adreslerini yasaklar ve CAPTCHA talep eder. Bu kılavuzda engellerin neden oluştuğunu ve parser'ınızı nasıl ayarlayarak aylarca yasaklanmadan çalışabileceğinizi inceleyeceğiz.

Pazar yerleri neden API'ye sık istekleri engelliyor

Pazar yerleri altyapılarını desteklemek için büyük paralar harcıyor — sunucular, veritabanları, CDN. Fiyatları parse etmek için dakikada binlerce istek yaptığınızda, sistemlerine ek bir yük oluşturuyorsunuz. Ancak engellerin ana nedeni teknik değil, iş odaklıdır.

Engellerin başlıca nedenleri:

  • Rekabetçi verilerin korunması. Wildberries ve Ozon, rakiplerin fiyatlar, stoklar ve popüler ürünler hakkında kolayca bilgi almasını istemiyor. Bu veriler ticari sırdır.
  • Sunucular üzerindeki yükün azaltılması. Bir parser, 10.000 normal alıcının oluşturduğu kadar istek üretebilir. Bu, barındırma maliyetlerini artırır.
  • Manipülasyon ve spam ile mücadele. Otomatik sistemler, görüntüleme, yorum artırma ve Avito'da toplu ilan verme için kullanılır.
  • API'nin paraya dönüştürülmesi. Bazı pazar yerleri, limitlerle birlikte resmi ücretli API'ler sunar. Ücretsiz parsing'i engelleyerek, erişim satın almayı teşvik ederler.

Örneğin, eğer her saat 5000 ürünün fiyatını izliyorsanız — bu günde 120.000 istek demektir. Tek bir IP adresinden bu durum şüpheli görünür ve pazar yerinin koruma sistemi hızlı bir şekilde erişiminizi engeller.

Wildberries, Ozon ve Avito hangi koruma yöntemlerini kullanıyor

Modern pazar yerleri, parsing'e karşı çok katmanlı bir koruma kullanıyor. Bu mekanizmaların anlaşılması, engellerin aşılması için doğru ayarlamalar yapmanıza yardımcı olacaktır.

Koruma Yöntemi Nasıl Çalışır Nasıl Aşılır
Oran Sınırlaması Tek bir IP'den isteklerin sınırlandırılması: saatte 100-500 İstekler arasında gecikmeler + IP döngüsü
IP Kara Listesi Bilinen veri merkezi proxy'lerinin engellenmesi Yerel proxy'lerin kullanımı
User-Agent Kontrolü Tarayıcı User-Agent'ı olmayan isteklerin engellenmesi Gerçekçi başlıkların ayarlanması
JavaScript Kontrolleri Veri almak için JS kodunun çalıştırılması gerekliliği Headless tarayıcıların kullanımı
Captcha Şüpheli aktivite durumunda zorunlu kontrol İstek sıklığını azaltma, CAPTCHA çözümleme servisleri
TLS Parmak İzi TLS parametrelerine göre otomasyonun belirlenmesi Doğru parmak izi ile kütüphanelerin kullanımı
Davranış Analizi Tıklama hızı, fare hareketleri gibi kalıpların analizi Gecikmelerin rastgeleleştirilmesi, insan davranışının taklidi

Wildberries agresif bir koruma kullanıyor: tek bir IP'den saatte yaklaşık 200-300 istek limiti, User-Agent kontrolü ve JavaScript zorlukları. Limit aşıldığında HTTP 429 (Too Many Requests) veya 403 (Forbidden) alırsınız.

Ozon API üzerinden parsing'e daha hoşgörülü, ancak veri merkezi IP'lerini aktif olarak yasaklıyor. IP türünü belirleme servislerini kullanıyorlar (DataCenter vs Residential), bu nedenle normal proxy'ler genellikle çalışmıyor.

Avito API'yi toplu ilan verme ve iletişim bilgilerini parse etmeye karşı koruyor. Burada coğrafi bağlam önemlidir: Kazan'da bir ilan veriyorsanız, IP'nin Kazan'dan olması gerekir, aksi takdirde moderasyon yayınınızı engeller.

Oran sınırlaması: istekler arasındaki gecikmeleri nasıl doğru ayarlarsınız

Oran sınırlaması — istek hızını yapay olarak sınırlamak, böylece aktiviteniz normal bir kullanıcının davranışına benzesin. Ana kural: yavaş ama istikrarlı olmak, hızlı olup yasaklanmaktan iyidir.

Popüler pazar yerleri için önerilen ayarlar:

Wildberries:

  • İstekler arasındaki gecikme: 2-5 saniye (rastgeleleştirilmiş)
  • Tek bir IP'den maksimum 150-200 istek
  • Her 100 istektan sonra 10-15 dakika ara
  • 200 istektan sonra IP döngüsü

Ozon:

  • İstekler arasındaki gecikme: 1-3 saniye
  • Tek bir IP'den maksimum 300-400 istek
  • Yerel proxy kullanımı zorunlu
  • 300 istektan sonra IP döngüsü

Avito:

  • İstekler arasındaki gecikme: 3-7 saniye
  • Maksimum 50-100 istek (katı limitler)
  • IP, ilan şehrine uygun olmalıdır
  • Bir IP = bir hesap (karıştırmayın)

Rastgeleleştirilmiş gecikmeleri nasıl uygulayabilirsiniz: "Tam olarak 3 saniye" gibi sabit aralıklar kullanmayın — bu bot gibi görünür. Rastgelelik ekleyin: 2 ile 5 saniye arasında. Çoğu parser bunu ayarlarla destekler.

Örneğin, Python'da requests kütüphanesi ile bu şekilde görünür:

import time
import random
import requests

def make_request(url, proxies):
    response = requests.get(url, proxies=proxies)
    # 2 ile 5 saniye arasında rastgele gecikme
    delay = random.uniform(2.0, 5.0)
    time.sleep(delay)
    return response

# Kullanım örneği
proxy = {
    'http': 'http://username:password@proxy.example.com:8000',
    'https': 'http://username:password@proxy.example.com:8000'
}

for product_id in product_list:
    url = f'https://card.wb.ru/cards/detail?nm={product_id}'
    response = make_request(url, proxy)
    # Verilerin işlenmesi...

Önemli nokta: Her 100-200 istektan sonra uzun bir ara (10-20 dakika) verin veya IP'yi değiştirin. Bu, ürünleri inceleyen bir insanın davranışını taklit eder.

Yük dağılımı için proxy döngüsü

Doğru gecikmelere sahip olsanız bile, tek bir IP uzun süreli yükü kaldırmaz. Çözüm — proxy döngüsü: istekleri birçok IP adresi arasında dağıtmak. Bu, pazar yerlerinde istikrarlı bir parsing'in temelidir.

Pazar yerleri için proxy türleri:

Proxy Türü Avantajlar Dezavantajlar Hangi görevler için
Veri Merkezleri Hızlı, ucuz, istikrarlı Kolayca belirlenir, sıkça yasaklı listelerde Yandex.Market, küçük pazar yerleri
Yerel Gerçek ev kullanıcılarının IP'leri, düşük yasaklama riski Veri merkezlerinden daha pahalı, daha yavaş Wildberries, Ozon, Avito
Mobil Mobil operatörlerin IP'leri, maksimum anonimlik En pahalı, değişken hız Avito'daki katı engellerin aşılması

Wildberries ve Ozon için yerel proxy'leri kullanmanızı öneririz — bunlar gerçek ev kullanıcılarının IP'lerine sahiptir, bu nedenle pazar yerleri onları normal alıcılardan ayırt edemez. Veri merkezi proxy'leri burada kötü çalışır: Ozon ve Wildberries bu tür IP'leri kara listeye alır.

Proxy döngüsü stratejileri:

  • N istek sonrası döngü. Her 100-300 istektan sonra IP'yi değiştirin. Bu, verimlilik ve güvenlik arasında optimal bir denge sağlar.
  • Zamana göre döngü. Her 30-60 dakikada bir IP'yi değiştirin. Uzun parsing oturumları için uygundur.
  • Sticky oturumlar. Aynı ürün/kategori için tüm isteklerde bir IP kullanın, sonra değiştirin. Bu, şüpheyi azaltır.
  • Coğrafi bağlam. Avito için zorunlu: Moskova ilanlarını Moskova IP'leri ile parse edin, Kazan ilanlarını Kazan IP'leri ile.

Çoğu yerel proxy sağlayıcısı otomatik döngü sunar: bir endpoint alırsınız ve IP, belirli bir sıklıkla veya her istekte otomatik olarak değişir. Bu, parser'ı ayarlamayı kolaylaştırır.

Python'da proxy havuzunun ayarlanması örneği:

import requests
import random

# Proxy listesi (bir dosyadan yüklenebilir)
proxy_list = [
    'http://user:pass@proxy1.example.com:8000',
    'http://user:pass@proxy2.example.com:8000',
    'http://user:pass@proxy3.example.com:8000',
    # ... başka 50-100 proxy
]

def get_random_proxy():
    proxy = random.choice(proxy_list)
    return {
        'http': proxy,
        'https': proxy
    }

# Kullanım
for product_id in product_list:
    proxy = get_random_proxy()  # Her istek için rastgele proxy
    response = requests.get(url, proxies=proxy)
    # Verilerin işlenmesi...

Tarayıcı taklidi için başlıkların ve parmak izinin ayarlanması

Pazar yerleri yalnızca IP ve istek sıklığını değil, aynı zamanda HTTP başlıklarını da analiz eder. Eğer parser'ınız varsayılan kütüphane başlıklarıyla istek gönderiyorsa (örneğin, python-requests/2.28.0), hemen bot olarak belirlenir.

Tarayıcı taklidi için zorunlu başlıklar:

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    'Accept-Language': 'tr-TR,tr;q=0.9,en-US;q=0.8,en;q=0.7',
    'Accept-Encoding': 'gzip, deflate, br',
    'DNT': '1',
    'Connection': 'keep-alive',
    'Upgrade-Insecure-Requests': '1',
    'Sec-Fetch-Dest': 'document',
    'Sec-Fetch-Mode': 'navigate',
    'Sec-Fetch-Site': 'none',
    'Cache-Control': 'max-age=0',
    'Referer': 'https://www.google.com/'
}

Önemli noktalar:

  • User-Agent gerçek bir tarayıcıya uygun olmalıdır. Güncel Chrome, Firefox, Safari sürümlerini kullanın. Her 100-200 istektan sonra User-Agent'ı değiştirin.
  • Accept-Language proxy'nin coğrafyasına uygun olmalıdır. Rus IP'leri kullanıyorsanız — tr-TR koyun, Ukrayna IP'leri için — uk-UA.
  • Referer kullanıcının nereden geldiğini gösterir. İlk istek için Google/Yandex kullanın, sonraki istekler için pazar yerinin iç sayfalarını kullanın.
  • Sec-Fetch-* başlıkları gerçekçilik katar. Modern tarayıcılar bunları otomatik olarak gönderir.

TLS Parmak İzi: Gelişmiş koruma sistemleri (Ozon, Wildberries) TLS bağlantı parametrelerini analiz eder: cipher suite sırası, uzantılar, protokol sürümü. Python/Node.js standart kütüphaneleri, tarayıcılardan farklı bir parmak izine sahiptir.

Çözüm — özel kütüphanelerin kullanımı:

  • curl-impersonate (Python) — Chrome/Firefox TLS parmak izini taklit eder
  • tls-client (Go, Python bağlamaları) — özelleştirilebilir TLS parmak izi
  • Playwright / Puppeteer — gerçek TLS ile headless tarayıcılar

Çoğu pazar yeri parsing görevi için doğru HTTP başlıkları ve yerel proxy'ler yeterlidir. TLS parmak izi, yalnızca en korumalı API'lerle çalışırken kritiktir.

API vs web scraping: hangisi daha güvenli

Pazar yerlerinin veri elde etmenin iki yolu vardır: resmi API ve HTML sayfalarını parse etme (web scraping). Hangi yöntemi seçmelisiniz?

Parametre Resmi API Web Scraping
Yasal Durum ✅ İzinli, belgeleri mevcut ⚠️ Gri alan, ToS'yi ihlal edebilir
İstikrar ✅ Verilerin istikrarlı yapısı ❌ Site yeniden tasarlandığında bozulur
Limitler ⚠️ Katı resmi limitler ⚠️ Resmi olmayan, ancak koruma var
Verilere Erişim ⚠️ Tüm veriler mevcut değil ✅ Tüm kamu verileri
Hız ✅ Hızlı JSON yanıtları ❌ HTML nedeniyle daha yavaş
Maliyet ⚠️ Genellikle ücretli ✅ Ücretsiz (sadece proxy)

Seçim önerileri:

  • Resmi API'yi kullanın eğer: Küçük veri hacimlerine ihtiyacınız varsa (günde 10.000 ürüne kadar), erişim için ödeme yapmaya hazırsanız, yasal durum ve istikrar önemliyse.
  • Web scraping kullanın eğer: Büyük veri hacimlerine ihtiyacınız varsa, resmi API gerekli bilgileri sağlamıyorsa (örneğin, rakip fiyatları), bütçeniz sınırlıysa.

Hibrit yaklaşım: Birçok profesyonel parser, her iki yöntemi birleştirir. Örneğin, ürün listesini API üzerinden alırlar (hızlı ve yasal), ancak fiyatlar ve stoklar hakkında ayrıntılı bilgileri HTML sayfalarından parse ederler (daha fazla veri).

Pazar yerlerinin dahili API'leri: Resmi API dışında, pazar yerleri web sitesinin çalışması için dahili API'ler kullanır. Örneğin, Wildberries ürün verilerini https://card.wb.ru/cards/detail üzerinden yükler. Bu endpoint'ler belgelenmemiştir, ancak HTML parsing'den daha hızlı çalışır. Dezavantajı — önceden haber verilmeden değişebilir.

Popüler parser'ların ve araçların ayarlanması

Çoğu satıcı ve pazarlamacı, pazar yerlerini parse etmek için hazır araçlar kullanır. Popüler çözümlerde proxy ve limitleri nasıl doğru ayarlayacağınızı inceleyelim.

Scrapy (Python framework) ayarlama

Scrapy — web scraping için popüler bir framework. Pazar yerleri ile çalışmak için settings.py dosyasına ekleyin:

# İstekler arasındaki gecikmeler
DOWNLOAD_DELAY = 3  # 3 saniye
RANDOMIZE_DOWNLOAD_DELAY = True  # 0.5*DELAY ile 1.5*DELAY arasında rastgeleleştirme

# Eşzamanlı istek limitleri
CONCURRENT_REQUESTS = 8
CONCURRENT_REQUESTS_PER_DOMAIN = 2

# Proxy ayarı (middleware rotating-proxies üzerinden)
ROTATING_PROXY_LIST = [
    'http://user:pass@proxy1.example.com:8000',
    'http://user:pass@proxy2.example.com:8000',
    # ... proxy listesi
]

# User-Agent döngüsü
USER_AGENT_LIST = [
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Safari/537.36',
    # ... User-Agent listesi
]

# Hatalarda tekrar deneme
RETRY_TIMES = 3
RETRY_HTTP_CODES = [429, 500, 502, 503, 504]

Octoparse (kodsuz görsel parser) ayarlama

Octoparse — programlama olmadan parsing için popüler bir araç. Proxy ve limitleri ayarlama:

  1. Görev Ayarları → Gelişmiş Seçenekler'i açın
  2. "Ağ" bölümünde "Proxy Sunucusu Kullan" seçeneğini etkinleştirin
  3. Proxy listesini IP:PORT:USER:PASS formatında ekleyin
  4. Otomatik döngü için "Her istek için IP'yi döndür" seçeneğini etkinleştirin
  5. "Hız" bölümünde "Yavaş" veya "Özel" seçeneğini 3-5 saniye gecikme ile ayarlayın
  6. İnsan davranışını taklit etmek için "Rastgele gecikme" seçeneğini etkinleştirin

Selenium (tarayıcı otomasyonu) ayarlama

Selenium gerçek bir tarayıcıyı yönetir, bu nedenle birçok korumayı aşar. Proxy ile ayarlama örneği:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
import random

# Proxy ile Chrome ayarlama
chrome_options = Options()
chrome_options.add_argument('--proxy-server=http://user:pass@proxy.example.com:8000')
chrome_options.add_argument('--disable-blink-features=AutomationControlled')
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option('useAutomationExtension', False)

driver = webdriver.Chrome(options=chrome_options)

# WebDriver'ı gizleme
driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")

# Gecikmeli parsing
urls = ['https://www.wildberries.ru/catalog/...', ...]

for url in urls:
    driver.get(url)
    # 3-7 saniye arasında rastgele gecikme
    time.sleep(random.uniform(3, 7))
    
    # Okuma taklidi için kaydırma
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight/2);")
    time.sleep(random.uniform(1, 3))
    
    # Veri parsing
    # ...

Pazar yerleri için hazır parsing servisleri

Eğer parser'ınızı kendiniz ayarlamak istemiyorsanız, özel servisleri kullanın:

  • Mpstats.io — Wildberries ve Ozon analitiği, otomatik fiyat ve satış izleme
  • SellerFox — pazar yerlerinde rakip izleme, stok takibi
  • Moneyplace — Avito parsing, otomatik ilan verme
  • Parsehub — her türlü site için görsel parser, pazar yerleri dahil

Bu servisler zaten proxy'leri, limitleri ve korumaları aşmayı ayarlamıştır — geriye sadece neyi parse edeceğinizi belirtmek kalır. Dezavantajı — aylık abonelik 2000₽'den başlar.

Engellerin izlenmesi ve otomatik tepki

Doğru ayarlarla bile engeller mümkündür: pazar yerleri korumalarını günceller, proxy'ler kara listeye alınır, limitler değişir. Problemleri izlemek ve otomatik olarak tepki vermek önemlidir.

İzlenmesi gereken engel belirtileri:

  • HTTP 429 (Too Many Requests) — istek limiti aşıldı, ara vermeniz veya IP'yi değiştirmeniz gerekiyor
  • HTTP 403 (Forbidden) — IP yasaklandı, hemen proxy döngüsü gerekiyor
  • HTTP 503 (Service Unavailable) — geçici aşırı yük veya DDoS koruması
  • Yanıt içinde CAPTCHA — otomasyon tespit edildi, aktiviteyi azaltmanız gerekiyor
  • Boş yanıtlar veya ana sayfaya yönlendirme — yumuşak engel
  • Cevap süresinde ani artış — sunucu tarafında oran sınırlaması olabilir

Engellere otomatik tepki (Python örneği):

import requests
import time
from datetime import datetime

class SmartParser:
    def __init__(self, proxy_list):
        self.proxy_list = proxy_list
        self.current_proxy_index = 0
        self.request_count = 0
        self.blocked_proxies = set()
        
    def get_next_proxy(self):
        # Engellenen proxy'leri atla
        while self.current_proxy_index in self.blocked_proxies:
            self.current_proxy_index = (self.current_proxy_index + 1) % len(self.proxy_list)
        
        proxy = self.proxy_list[self.current_proxy_index]
        return {'http': proxy, 'https': proxy}
    
    def rotate_proxy(self):
        self.current_proxy_index = (self.current_proxy_index + 1) % len(self.proxy_list)
        self.request_count = 0
        
    def make_request(self, url):
        max_retries = 3
        
        for attempt in range(max_retries):
            try:
                proxy = self.get_next_proxy()
                response = requests.get(url, proxies=proxy, timeout=10)
                
                # Engeli kontrol et
                if response.status_code == 429:
                    print(f"[{datetime.now()}] Oran limiti! 60 saniye ara...")
                    time.sleep(60)
                    self.rotate_proxy()
                    continue
                    
                elif response.status_code == 403:
                    print(f"[{datetime.now()}] IP yasaklandı! Proxy döngüsü...")
                    self.blocked_proxies.add(self.current_proxy_index)
                    self.rotate_proxy()
                    continue
                    
                elif response.status_code == 503:
                    print(f"[{datetime.now()}] Sunucu aşırı yüklü. 120 saniye ara...")
                    time.sleep(120)
                    continue
                
                # Başarılı istek
                self.request_count += 1
                
                # 200 istektan sonra döngü
                if self.request_count >= 200:
                    self.rotate_proxy()
                    time.sleep(10)  # Döngü sonrası ara
                
                return response
                
            except requests.exceptions.Timeout:
                print(f"[{datetime.now()}] Zaman aşımı. {attempt + 1}/{max_retries} deneme")
                time.sleep(5)
                
        return None  # Tüm denemeler tükenmiştir

Loglama ve uyarılar: Kritik olaylarda bildirim ayarlayın. Örneğin, aşağıdaki durumlarda Telegram'a mesaj gönderin:

  • Havuzdan %30'dan fazla proxy yasaklandı
  • Başarılı istek oranı %80'in altına düştü
  • Parser 30 dakikadan fazla veri almadı
  • Yanıtlarda CAPTCHA tespit edildi

İzleme için metrikler:

  • Başarı oranı — başarılı isteklerin yüzdesi (>%90 olmalı)
  • Ortalama yanıt süresi — yanıt süresinin ortalaması (artış sorunları gösterebilir)
  • Saatteki istek sayısı — her proxy için saatlik istek sayısı
  • Proxy sağlığı — havuzdaki çalışan proxy'lerin yüzdesi
  • Engel oranı — engel sıklığı (<%5 olmalı)

Metriklerin görselleştirilmesi için panolar kullanın: Grafana, Datadog veya otomatik güncellemelerle basit Google Sheets.

Sonuç

Pazar yerlerinde parsing sırasında engeller, doğru araç ayarları ile aşılabilir. Engeller olmadan istikrarlı bir çalışma için ana noktalar:

  • Wildberries, Ozon ve Avito için yerel proxy'ler kullanın — veri merkezi proxy'leri burada çalışmaz
  • İstekler arasında 2-5 saniye rastgele gecikmeler ayarlayın
  • Her 150-300 istektan sonra veya her 30-60 dakikada bir IP'yi döndürün
  • Güncel User-Agent ile gerçekçi HTTP başlıkları kullanın
  • Engelleri izleyin ve otomatik olarak tepki verin
  • Avito için ilan şehrine göre IP'nin coğrafi bağlamı zorunludur

Doğru ayarlanmış bir parser, kaliteli proxy'lerle aylarca tek bir engelle karşılaşmadan çalışabilir, her gün on binlerce ürün toplayabilir. Anahtar — hız peşinde koşmak değil, normal bir kullanıcının davranışını taklit etmektir.

Eğer Wildberries, Ozon veya Avito'yu düzenli olarak parse etmeyi planlıyorsanız, yerel proxy'ler ile otomatik döngü kullanmanızı öneririz — bunlar maksimum istikrar ve minimum engel riski sağlar. Mobil IP gerektiren görevler için (örneğin, Avito'daki katı engellerin aşılması) Rus operatörlerinin IP'leri ile mobil proxy'ler uygundur.

```