Przykład 2026: Jak codziennie zbierać 1 000 000 kart Wildberries — architektura, proxy, antyban
Spis treści
- Wprowadzenie: dlaczego temat jest aktualny i czego się nauczysz
- Podstawy: kluczowe pojęcia i terminy
- Głębokie zanurzenie: jak dziś działa antybot i co ważne emulować
- Architektura i kolejki zadań: szkielet, który nie „upada” przy milionie dziennie
- Proxy i rotacja: mobilne ip jako czynnik naturalności
- Metoda 1: headless-przeglądarka playwright — kiedy potrzebny jest „ludzki” profil
- Metoda 2: wydajny klient http z poprawnym profilem
- Metoda 3: strategie antyban i wzorce behawioralne
- Metoda 4: obsługa błędów, deduplikacja i samonaprawa
- Przechowywanie danych: schemy, wersje i szybkość analizy
- Typowe błędy, przez które spada wskaźnik sukcesu
- Narzędzia i zasoby: co wykorzystać w 2026 roku
- Przykłady i wyniki: realna wydajność i ekonomika
- Faq: głębokie pytania i odpowiedzi
- Podsumowanie: resume i plan wdrożenia
Wprowadzenie: dlaczego temat jest aktualny i czego się nauczysz
Do 2026 roku Wildberries będzie jedną z największych ekosystemów e-commerce w regionie, a jakość i szybkość danych o produktach staną się krytycznymi czynnikami dla producentów, dystrybutorów, analityków, zespołów arbitrażowych, działów zajmujących się wyceną i menedżerów kategorii. Codzienne monitorowanie cen, stanów magazynowych, Buy Box, pozycji, kontentu i recenzji nie jest już możliwe do wykonania ręcznie lub za pomocą małych skryptów. Potrzebna jest przemysłowa architektura, która może stabilnie zbierać milion kart dziennie po zrozumiałych kosztach i przewidywalnym SLA.
W tym artykule omówimy, jak zaprojektować i eksploatować taki system: od projektowania kolejek i orkiestracji zadań, po prawidłową rotację mobilnych proxy i staranne obejście antybota WB. Pokażemy strukturę przechowywania, dostarczanie danych do paneli analitycznych, analizę błędów i zwrotów. Dodatkowo przedstawimy realne dane dotyczące szybkości, kosztów i wskaźnika sukcesu w warunkach bojowych w 2026 roku. Otrzymasz gotowe ramy i fragmenty kodu w Pythonie, checklisty do uruchomienia w produkcji oraz zasady, które przetrwają wszelkie aktualizacje antybota.
Skupiamy się na odpowiedzialnym i legalnym zbieraniu ogólnodostępnych danych. Przestrzegaj zasad serwisu, przepisów prawnych i norm etycznych. Naszym celem jest dyscyplina inżynieryjna: przewidywalność, odporność na awarie, bezpieczeństwo i wydajność.
Podstawy: kluczowe pojęcia i terminy
Karta produktu — strona z atrybutami SKU (nazwa, marka, zdjęcie, specyfikacje), cenami (cena podstawowa, rabaty, promocje), dostępnością i logistyką (magazyn, czas dostawy), treścią (opis, wideo), sygnałami z mediów społecznościowych (oceny, recenzje, pytania). Dla stabilnego monitorowania kart ważne jest rozdzielenie komponentów: rdzeń (pola inwariantne), dynamika (ceny, stany), pochodne metryki (Buy Box, minimalne ceny od sprzedawców).
Typy źródeł: 1) publiczne strony HTML; 2) frontowe JSON-endpointy, które przekazują dane do renderowania; 3) obrazy i statyczne dane (CDN) — nie zawsze są potrzebne, ale przydatne do kontroli jakości treści. W 2026 roku frontowe API są intensywnie zabezpieczone: cechy behawioralne i sieciowe, poprawna realizacja HTTP/2, nagłówki i ciasteczka, odciski TLS, a także obecność legitmnego profilu mobilnego/desktopowego.
Legalne zbieranie danych — nie naruszać praw, nie obejmować płatnych dostępy, nie ingerować w funkcjonalność serwisu, nie obciążać platformy, szanować oszczędnościowe limity i prywatność użytkowników. Ograniczaj się do publicznie dostępnych kart produktów, nie dotykaj zamkniętych sekcji.
Poziom sieciowy: istotne są ASN (operator), typ IP (mobilny NAT, rezydencjalny), protokół (HTTP/2, czasami HTTP/3 na statycznych danych), wsparcie dla TLS 1.3, poprawne odciski JA3/JA4 i zawartość ClientHello. Dla stabilnego sukcesu na WB zaleca się emulację prawdziwych klientów z wzorcami behawioralnymi i mobilnym profilem, oraz rozsądna geografia IP.
Sekcje i ciasteczka: niemożliwe do odtworzenia markery i behawioralne ciasteczka wpływają na dostęp. Stabilny zestaw ciasteczek na poziomie sesji proxy, staranna przekazanie kontekstu między żądaniami i poszanowanie TTL to podstawa wysokiej konwersji żądań.
Architektura danych: pipeline z kolejką zadań (z priorytetowaniem), workerami (z adaptacyjną szybkością i limitami), magazynem (surowe zrzuty, znormalizowane tabele w Postgres/ClickHouse, warstwa paneli), a także warstwa monitorowania (metryki, logi, alerty). Kluczowe cechy — idempotentność operacji, śledzenie od zadania do wyniku oraz możliwość częściowego odzyskania.
Głębokie zanurzenie: jak dziś działa antybot i co ważne emulować
W 2026 roku antyboty marketplace'ów (w tym WB) oceniają nie tylko historię IP, ale i złożony profil klienta: odcisk TLS, priorytety HTTP/2 i okna, kolejność nagłówków, nagłówki bezpieczeństwa i keszowania, semantyka UA i platforma, spójność nagłówków Accept-* i Sec-*, mapa czasowa kliknięć i scrollowania w przeglądarce, poprawne opóźnienia między nawigacjami, błędy sieciowe oraz statystyki behawioralne dotyczące sesji i prefetchingu. Ważne jest tempo: nagłe skoki równoległych żądań z jednego „klienta” budzą niepokój, tak samo jak całkowicie „sterylna” nawigacja bez obrazów, service workerów i zapytań w tle.
Stąd wynikają trzy wnioski. Po pierwsze: goły klient HTTP z domyślną biblioteką często jest niewystarczający; potrzebna jest albo integracja z nowoczesną przeglądarką headless (Playwright z delikatnymi ustawieniami), albo starannie zbudowany stos HTTP/2 z poprawnymi niskopoziomowymi cechami. Po drugie: mobilne proxy znacznie zwiększają naturalność ruchu dzięki agregacji NAT i rzeczywistemu profilowi sieci komórkowej. Po trzecie: należy ostrożnie obchodzić się z ciasteczkami, nie resetować ich bez powodu i synchronizować sesje z cyklem życia IP.
Praktycznie oznacza to: 1) oddzielne pule desktopowych i mobilnych profili; 2) „lepki” sesje (sticky) na 10–30 minut, jeśli trzeba utrzymać czas zachowania, oraz krótkie sesje dla jednorazowych zapytań; 3) geograficznie rozsądna routingu (kraj, region) odpowiadająca logice użytkowników WB; 4) łagodna prędkość (adaptive rate), która uwzględnia typy stron, porę dnia i odpowiedź serwera.
Architektura i kolejki zadań: szkielet, który nie „upada” przy milionie dziennie
Celem tego rozdziału jest zbudowanie systemu z modułów, które łatwo skalują się: orkiestrator, harmonogram, kolejka, workerzy, warstwa proxy, kontrole kontroli, magazyn.
Schemat wysokiego poziomu
- Scheduler — określa priorytety: nowe SKU, zmienione, problematyczne, okresowe obiegi, doładowanie pominiętych pakietów.
- Dispatcher — umieszcza zadania w kolejce z odpowiednimi kluczami parzytyzacji.
- Kolejka — Kafka lub NATS dla pełnej przepustowości i redystrybucji; Redis Streams dla szybkiej iteracji.
- Workers — izolowane procesy (Python) z adaptacyjną szybkością i metrykami.
- Proxy Layer — menedżer pul mobilnych proxy i zasady rotacji.
- Storage — ClickHouse dla zdarzeń i zrzutów, Postgres dla tabel transakcyjnych i metadanych, zgodne z S3 magazyn HTML.
- Observability — Prometheus/Grafana/ELK + alerty; profilowanie na poziomie request/response, proxy, worker, temat kolejki.
Partycjonowanie i idempotentność
Klucz to SKU_ID lub CARD_ID. Użyj spójnego haszowania do rozdzielenia na partycje. Idempotentność zapewniają deterministyczne klucze wyników: jedno SKU w interwale nie powinno tworzyć duplikatów. W ClickHouse — MergeTree z partycją według daty i kluczem podstawowym (sku_id, snapshot_ts), plus deduplikacja po wersji.
Backpressure i limity
Workerzy biorą zadania paczkami (batch size 10–50) i dostosowują RPS na podstawie wskaźnika sukcesu i średniego opóźnienia. Limity wprowadzane są według: 1) proxy-endpoint; 2) typu strony; 3) regionu. Przy degradacji (wzrost 5xx, wzrost CAPTCHA) intensywność zmniejsza się o 20–40% z eksponencjalnym przywracaniem.
Przykład kodu: podstawowy worker z adaptacyjnym ograniczeniem na Pythonie
Przykład ilustrujący, uproszczony i bez zewnętrznych zależności.
import time, random, queue; from threading import Thread; class RateLimiter: def __init__(self, rps): self.rps=rps; self.min_rps=0.3*rps; self.max_rps=2*rps; self.win=[]; def mark(self, ok): self.win.append(1 if ok else 0); self.win=self.win[-100:]; suc=sum(self.win)/len(self.win) if self.win else 1.0; if suc<0.8: self.rps=max(self.min_rps, self.rps*0.8); elif suc>0.95: self.rps=min(self.max_rps, self.rps*1.1); return self.rps; def sleep(self): time.sleep(1.0/max(self.rps,0.1)); class Worker(Thread): def __init__(self, q): super().__init__(); self.q=q; self.rl=RateLimiter(3.0); def run(self): while True: try: task=self.q.get(timeout=1); ok=self.process(task); self.rl.mark(ok); self.rl.sleep(); self.q.task_done(); except queue.Empty: break; def process(self, task): # заглушка запроса return random.random()>0.1; q=queue.Queue(); [q.put(f"sku-{i}") for i in range(1000)]; ws=[Worker(q) for _ in range(8)]; [w.start() for w in ws]; [w.join() for w in ws]
Proxy i rotacja: mobilne IP jako czynnik naturalności
Dlaczego mobilne proxy: mobilne ASN, rzeczywisty dostęp radiowy, agregacja NAT, naturalne TTL i rozkład IP zwiększają zaufanie antybota. Poprawnie zarządzając rotacją i sesjami, znacznie zwiększasz wskaźnik sukcesu przy umiarkowanej cenie za milion kart.
Strategie rotacji
- Sticky-sesje 10–30 minut dla stron, gdzie ważne są spójne kroki (HTML kart, sąsiednie zapytania do podsekcji JSON).
- Hard-rotate przy błędach klas 403/429/CAPTCHA — natychmiast zmień IP i zresetuj sesję.
- Soft-rotate na timerze — równomierna zmiana IP co 5–15 minut dla „świeżości” puli.
- Scoring proxy — ocena oparta na 1) udziale 2xx; 2) średnim opóźnieniu; 3) udziale CAPTCHA; 4) rozmiarze odpowiedzi. Niska ocena — w kwarantannie.
Integracja z dostawcą
W 2026 roku na rynku ważne są dostawcy z szerokim rzeczywistym zasięgiem mobilnym. Usługi MobileProxy.Space oferują 218+ milionów IP, 53+ krajów, rzeczywiste karty SIM operatorów, protokoły HTTP(S) i SOCKS5 w tym samym czasie, rotację według timera, API oraz linka, 3 godziny bezpłatnego testowania i wsparcie 24/7. Daje to elastyczność dla przemysłowego zbierania danych: można budować pule na podstawie krajów i szybko się skalować. Dodatkowo pomocne narzędzia: test IP, DNS Leak Test, Proxy Checker, kalkulator proxy, mapa opóźnień i generator odcisków przeglądarki. Nie zapomnij o kodzie promocyjnym YOUTUBE20 — 20% zniżki na pierwsze zakupy.
Menedżer puli proxy: projektowanie
- Abstrakcja Endpoint: adres, kraj, TTL, supports_http2, sticky_token, health_score.
- Polityka: soft-rotate, hard-rotate, warmup N zapytań, kwarantanna M minut po porażce.
- Metryki: sukces na podstawie endpointu, latencja p95, taksonomia błędów (403, 429, 5xx, timeout).
- Allocator: wydaje endpoint z uwzględnieniem tematu kolejki, regionu SKU i limitów.
Snippet: prosty menedżer sticky-sesji
import time, random; class Proxy: def __init__(self, url): self.url=url; self.sticky_token=None; self.expire=0; self.score=1.0; def acquire(self): now=time.time(); if now>self.expire: self.sticky_token=str(random.randint(1,10**9)); self.expire=now+900; return {"server":self.url, "sticky":self.sticky_token}; def report(self, ok, latency): self.score=max(0.1,min(2.0,self.score*(1.05 if ok else 0.9))); class Pool: def __init__(self, urls): self.items=[Proxy(u) for u in urls]; def get(self): self.items.sort(key=lambda x:-x.score); return self.items[0].acquire()
Metoda 1: Headless-przeglądarka Playwright — kiedy potrzebny jest „ludzki” profil
Kiedy używać: złożony frontend, dynamiczne ładowanie, uzależnienie od bufora historii, weryfikacja zachowań, wymagania dla poprawnego HTTP/2, priorytetów i kolejności nagłówków, a także do debugowania.
Delikatna konfiguracja kontekstu
- Tryb headful na niskim obciążeniu lub headless z rozsądnym viewportem i deviceScaleFactor.
- Mobilne user-agenty i media queries, poprawne Accept-Language, strefa czasowa, lokalizacja, geolokalizacja.
- Wyłączenie wykrywalnych API (navigator.webdriver), ostrożne opóźnienia między działaniami, ładowanie obrazów i częściowa aktywność zapytań w tle.
Wzorzec „rozgrzewania i zbierania”
- Stwórz kontekst z proxy i ciasteczkami.
- Otwórz listę, wykonaj 1–2 przewijania.
- Przejdź do karty, poczekaj na domcontentloaded, następnie networkidle (ostrożnie, nie zawsze nastąpi).
- Wydobądź HTML i kluczowe JSON-endpointy (poprzez route lub page.wait_for_response).
- Zrób przerwę 300–900 ms; zamknij stronę.
Snippet Pythona: uproszczone zbieranie karty
from playwright.sync_api import sync_playwright; def fetch_card(url, proxy_server): with sync_playwright() as p: b=p.chromium.launch(headless=True, proxy={"server":proxy_server}); ua="Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0 Mobile Safari/537.36"; ctx=b.new_context(user_agent=ua, locale="ru-RU", timezone_id="Europe/Moscow"); page=ctx.new_page(); page.goto(url, wait_until="domcontentloaded", timeout=30000); page.wait_for_timeout(600); html=page.content(); b.close(); return html
Praktyczne porady
- Zebrane wzorce „dobrych” opóźnień: krótkie human-like przerwy zwiększają konwersję odpowiedzi.
- Nie zwiększaj konkurencji stron w jednym kontekście powyżej 3–5 jednocześnie.
- Rozwiąż CAPTCHA poprzez ręczną weryfikację lub legalne usługi rozpoznawania tylko tam, gdzie jest to dozwolone i uzasadnione.
Metoda 2: Wydajny klient HTTP z poprawnym profilem
Kiedy używać: frontend stabilnie zwraca JSON bez skomplikowanego związku z zachowaniem, a także dla stron HTML, gdzie ważna jest liczba i szybkość.
Kluczowe elementy
- Transport HTTP/2 z konfigurowalną kolejnością nagłówków, wsparciem dla ALPN i H2-priorytetów.
- Poprawne nagłówki: User-Agent, Accept, Accept-Language, Cache-Control, Sec-CH-UA (ostrożnie i konsekwentnie).
- Cookie-jar i sesje związane z proxy.
- Randomizacja nie dla samej randomizacji: profile nie powinny „skakać” od zapytania do zapytania.
Snippet: aiohttp + podstawowa polityka retray z jitterem
import asyncio, aiohttp, random; async def get(url, proxy, headers, retries=3): backoff=0.4; for i in range(retries): try: timeout=aiohttp.ClientTimeout(total=20); async with aiohttp.ClientSession(timeout=timeout, headers=headers) as s: async with s.get(url, proxy=proxy) as r: if r.status==200: return await r.text(); elif r.status in (403,429): raise Exception("blocked"); else: raise Exception(f"bad:{r.status}"); except Exception as e: await asyncio.sleep(backoff*(2**i)+random.random()*0.2); return None
Praktyka
- Zredukuj liczbę hostów w połączeniu do minimum, ponownie wykorzystuj sesję.
- Prowadź „paszport” sesji: jaki IP, jaki UA, jakie ciasteczka, ile udanych zapytań, kiedy zmieniać.
- Śledź rozmiary odpowiedzi i różnicuj crawling: jeśli karta się nie zmienia, zwiększ okres obiegu.
Metoda 3: Strategie antyban i wzorce behawioralne
Strategia „nie szkodzić”: równomierne rozłożenie obciążenia, delikatne szczyty, przerwy w godzinach zwiększonej ochrony, utrzymanie stabilnych sesji, reagowanie na sygnały degradacji. Unikaj agresywnych retray-floodów: obniża to ogólną konwersję puli.
Framework SAFE
- Smooth — wygładzaj RPS i jitter.
- Adaptive — dostosowuj według metryk sukcesu/błędów/opóźnienia.
- Focused — priorytetyzuj ważne karty, odłóż niskopriorityzowane przy degradacji.
- Ethical — przestrzegaj regulacji, nie dotykaj zamkniętych sekcji.
Sygnały ochrony i reakcje
- Wzrost 403/429 — zmniejszyć prędkość o 30–50%, delikatnie rotować IP, zrestartować konteksty.
- Nieprzyzwoicie małe odpowiedzi — weryfikacja na „obcięte” strony; zmień profil klienta.
- Masywne time-outy — problemy z siecią lub serwerem; wprowadzić eksponencjalny backoff.
Miks profili desktopowych i mobilnych
Trzymaj część ruchu desktopowego (20–40%) dla naturalności, reszta mobilna. To odzwierciedla rzeczywisty rozkład i zwiększa zaufanie.
Metoda 4: Obsługa błędów, deduplikacja i samonaprawa
Celem jest stworzenie systemu, który się samonaprawia zamiast kruchego „padającego” zbieracza.
Klasyfikacja błędów
- Sieciowe: time-outy, reset połączenia, TLS.
- HTTP: 4xx (w tym 403/429), 5xx.
- Semantyczne: parser nie znalazł pola, zmieniła się struktura JSON.
- Systemowe: brak pamięci, wolne przechowywanie, awaria kolejki.
Polityki powtórzeń
- Zgłaszane zapytania — duplikat po N sekundach na innym proxy przy prawdopodobnym opóźnieniu.
- Exponential backoff + jitter — standard w niestabilnych segmentach.
- Kwarantanna — po 3–5 niepowodzeniach zadanie trafia do izolowanej kolejki do analizy.
Snippet: najprostszy circuit breaker
import time; class Circuit: def __init__(self, fail_thr=5, cool=60): self.fail=0; self.open_until=0; self.fail_thr=fail_thr; self.cool=cool; def allow(self): return time.time()>self.open_until; def report(self, ok): if ok: self.fail=0; else: self.fail+=1; if self.fail>=self.fail_thr: self.open_until=time.time()+self.cool; self.fail=0
Przechowywanie danych: schemy, wersje i szybkość analizy
Warstwy: 1) Surowe — zrzuty HTML/JSON w magazynie obiektowym (zgodnym z S3), z kompresją Zstd; 2) Staging — tabele zbierania danych z polami zgodnymi ze specyfikacją z możliwością częściowej braków; 3) Główne — znormalizowane tabele: produkty, ceny, stany magazynowe, oceny, recenzje; 4) Marts — agregaty do analizy produktowej.
Wybór DBMS
- ClickHouse — szybkie wstawienia paczkami i zapytania po kolumnach: doskonałe do zrzutów, logów i historii wersji.
- Postgres — operacje transakcyjne: statusy zadań, konfiguracja proxy, metadane SKU, uprawnienia.
- Magazyn obiektowy — trwałość zrzutów, tanie przechowywanie HTML.
Schemat ClickHouse do dynamiki cen
CREATE TABLE prices ( sku_id UInt64, ts DateTime64(3), price UInt32, promo_price UInt32, seller_id UInt64, region LowCardinality(String), source LowCardinality(String) ) ENGINE=MergeTree PARTITION BY toDate(ts) ORDER BY (sku_id, ts) SETTINGS index_granularity=8192;
Wersje i deduplikacja
Zachowuj hasz sumy treści strony; jeśli treść się nie zmieniła, aktualizuj tylko „puls” (ostatni status) oraz agreguj wersje по kluczowych polach. To zmniejsza koszt przechowywania i przyspiesza raporty.
Przepływ do analitycznych paneli
Twórz codzienne zestawienia: minimalne ceny według marki/kategorii, dynamika Buy Box, czas do wyczerpania zapasów, średnia ocena i rozpowszechnienie ocen. Matview ClickHouse lub pipeline dbt pomagają zautomatyzować publikację danych dla BI.
Typowe błędy, przez które spada wskaźnik sukcesu
- Nieodpowiednia rotacja IP — częsta zmiana adresu przy zachowywaniu tych samych ciasteczek i UA psuje sesję. Utrzymuj powiązania „IP+cookies+UA” w rozsądnych interwałach.
- Jednakowe nagłówki na wszystkie zapytania — zbyt sterylny profil. Wprowadzaj naturalne niewielkie wariacje i poprawne Accept-*.
- Szczyty konkurencyjności — ładowanie „całej mocy” w godzinach szczytu, łapanie masowych 429. Przejdź do wygładzania RPS.
- Brak informacji zwrotnej — brak metryk, brak adaptacji. Zawsze licz p95 latencji i rozkład statusów.
- Kruche parsowanie — zmiana kolejności pól — wszystko pada. Uczyń parsowanie odpornym na nieistotne zmiany.
- Nieoptymalne przechowywanie — ogromne duplikaty HTML bez kompresji. Włącz Zstd i kontroluj wersje.
Narzędzia i zasoby: co wykorzystać w 2026 roku
- Stos Python: Playwright (automatyzacja przeglądarek), aiohttp/httpx (klient HTTP), pydantic (walidacja), orjson (szybki JSON), uvloop (przyspieszenie cyklu zdarzeń), tenacity (retry), prometheus_client (metryki), structlog (logi).
- Kolejki: Kafka (wysoka przepustowość), NATS (niska latencja), Redis Streams (prostota i szybkość).
- Magazyn: ClickHouse, Postgres, MinIO lub zgodne z S3.
- Obserwowalność: Prometheus+Grafana, OpenTelemetry, ELK.
- Usługa mobilnych proxy: MobileProxy.Space — szeroka pula mobilnych IP, wygodna rotacja przez API/timer/link, wsparcie 24/7, 3 godziny bezpłatnego testowania. Przydatne darmowe narzędzia: test IP, DNS Leak Test, Proxy Checker, kalkulator proxy, mapa latencji, generator odcisków przeglądarki. Kod promocyjny YOUTUBE20 daje 20% zniżki na pierwsze zakupy.
- Środowiska testowe: izolowane stanowiska z emulacją obciążenia i syntetycznymi SKU, aby nie zakłócać produkcji.
Przykłady i wyniki: realna wydajność i ekonomika
Konfiguracja nr 1: „Zrównoważona” (zalecana jako start)
- Celem jest 1 000 000 kart/dziennie.
- Infrastruktura: 12–16 węzłów roboczych (4–8 vCPU, 8–16 GB RAM), Kafka lub Redis Streams, klaster ClickHouse z 3 węzłów (8–16 vCPU, NVMe), Postgres 2 vCPU.
- Proxy: pula 200–300 mobilnych endpointów, sticky 10–20 minut, łagodna rotacja co 10 minut, hard-rotate przy triggerach.
- Szybkość: 120–160 kart/sek w szczycie; średnio 11–13 kart/sek.
- Wskaźnik sukcesu: 92–95% według HTML; 88–92% według zabezpieczonych JSON-endpointów; ogólny 91–94%.
- Koszt: obliczenia i magazyn 300–600 dolarów miesięcznie (zależnie od regionu i dostawcy), proxy 900–1500 dolarów przy opisanym obciążeniu i jakości rotacji. Łącznie 1200–2100 dolarów/miesiąc przy dobrym zarządzaniu pulą i rozsądnym TTL. Rzeczywisty koszt jednej karty wynosi 0,0012–0,0021 dolara.
Konfiguracja nr 2: „Maksymalna oszczędność”
- Celem: te same 1 mln/dzień, akcent na oszczędności.
- Infrastruktura: 8–10 węzłów z agresywnym zużyciem CPU, więcej paczek i mniej równoległych przeglądarek.
- Proxy: 120–180 mobilnych endpointów, dłuższe sticky (20–30 minut), ostrożna prędkość.
- Szybkość: 80–110 kart/sek w szczycie.
- Wskaźnik sukcesu: 88–92% ogólny.
- Koszt: 800–1500 dolarów/miesiąc.
Konfiguracja nr 3: „Wysoka dostępność”
- Celem: SLA 99,5% według harmonogramu i zwiększona dokładność.
- Infrastruktura: 20–24 węzły, nadmiarowość DB, dwa pule proxy z różnych regionów.
- Szybkość: 150–220 kart/sek w szczycie.
- Wskaźnik sukcesu: 94–97% ogólny (dzięki łagodnej strategii zachowania i wysokiej jakości monitorowania).
- Koszt: 2000–3500 dolarów/miesiąc.
Praktyczne wnioski
- Kwalifikowana rotacja mobilnych proxy i poprawne sesje dają +6–12 punktów procentowych do wskaźnika sukcesu w porównaniu z statycznymi pulami.
- Zmniejszenie RPS w „ciężkich godzinach” obniża udział 429 o 30–50% i zwiększa całkowitą przepustowość w skali dnia.
- Przechowywanie pełnych HTML tylko przy zmianach zmniejsza obciążenie o 45–70% przy tygodniowym horyzoncie.
FAQ: głębokie pytania i odpowiedzi
1. Czy zawsze potrzebna jest przeglądarka?
Nie. Przeglądarka jest przydatna dla złożonego frontu i debugowania. W większości stabilnych stref wystarczy poprawny klient HTTP/2 z odpowiednimi nagłówkami, sesjami i mobilnym profilem.
2. Co jest ważniejsze dla antybana — IP czy zachowanie?
Oba czynniki są krytyczne. Mobilne IP zwiększają zaufanie, ale agresywne zachowanie wciąż może powodować blokady. Poprawne opóźnienia, stabilne nagłówki, ostrożne ciasteczka — są obowiązkowe.
3. Jak rozdzielać pulę proxy między zadania?
Podziel je według regionów i typów stron. Dla kart i wrażliwych JSON-organizuj najlepsze endpointy z sticky-sesjami, dla statyki używaj mniej „droższych” adresów.
4. Jak diagnozować „ukryte” blokady?
Patrz na rozmiar treści, czas do pierwszego bajtu, kody przekierowań, brak oczekiwanych kluczy w JSON. Zrób zrzuty HTML „złych” odpowiedzi i porównaj.
5. Jak mierzyć sukces?
Udział 2xx, pełność pól, udział zmienionych kart, czas aktualizacji zestawów, koszt karty, stabilność w godzinach.
6. Co robić z CAPTCHA?
Minimalizować jej występowanie dzięki zachowaniu i rotacji. W razie potrzeby — korzystaj z dozwolonych metod ręcznej lub usługowej weryfikacji tam, gdzie to legalne i dozwolone zasadami.
7. Jak radzić sobie z „dryfem schemy”?
Słaba zależność parsowania: wyszukuj pola za pomocą trwałych selektorów i podpisów, utrzymuj kilka resolverów, szybko wprowadzaj poprawki.
8. Jaki format przechowywać w Raw?
Skompresowany HTML/JSON (Zstd), dodawaj metadane: UA, IP/ASN (bez danych osobowych), czasy, oznaki sukcesu i wersję parsera.
9. Jak szybko restartować błędne strefy?
Oddzielne kolejki dla stref, feature-flag do wyłączenia segmentu, automatyczny rollback do „łagodnych” profili, eskalacja alertu do dyżurnego inżyniera.
10. Czy można połączyć nasze proxy z publicznymi?
Nie zalecamy. Mieszanie pogarsza reputację puli i przewidywalność. Utrzymuj czyste pule, śledź metryki i jakość.
Podsumowanie: resume i plan wdrożenia
Stabilne zbieranie 1 000 000 kart Wildberries dziennie w 2026 roku — zrealizowane zadanie, zakładając inżynieryjną dyscyplinę. Klucz do sukcesu — architektura z kolejkami i adaptacyjnymi workerami, poprawna rotacja mobilnych proxy, behawioralna „higiena” klienta, prawidłowe przechowywanie i monitorowanie. Zacznij od „zrównoważonej” konfiguracji, zmierz metryki, osiągnij wskaźnik sukcesu na poziomie 92–95%, a następnie optymalizuj koszty dzięki wersjonowaniu HTML, starannej rotacji i rozdzielaniu obciążenia według godzin.
Mini-checklista na start: 1) Uruchom kolejkę i workerów z adaptacyjnym ograniczeniem; 2) Ustaw pulę mobilnych proxy z sticky-sesjami i scoringiem; 3) Zdefiniuj polityki retry, circuit breaker i poison queue; 4) Wprowadź metryki przekrojowe i alerty; 5) Przechowuj surowe zrzuty z Zstd i znormalizowane tabele w ClickHouse/Postgres; 6) Stwórz panele do analizy produktowej; 7) Przeprowadź testy obciążeniowe i skalibruj RPS według godzin.
Jeśli nie masz stabilnej puli mobilnych adresów, zaczynaj od sprawdzonego dostawcy MobileProxy.Space: rzeczywiste karty SIM, 218+ milionów IP, 53+ krajów, rotacja według timerów i API, oraz 3 godziny bezpłatnego testowania, aby dobrać optymalną pulę i zmierzyć latencję przez ich mapę opóźnień i Proxy Checker. I pamiętaj o kodzie promocyjnym YOUTUBE20 — to od razu zmniejsza próg wejścia. Dalej — to kwestia techniki: staranny kod, przezroczyste metryki i poszanowanie platformy. Wtedy milion kart dziennie stanie się dla Ciebie rutyną, a nie wyczynem.