Wprowadzenie

W tym krok po kroku przewodniku skonfigurujesz pełnoprawny chmurowy web scraping w Apify z użyciem proxy mobilnych, stworzysz aktora w Node.js, uruchomisz testowe zadanie do zbierania kart produktów oraz nauczysz się bezpiecznie zarządzać limitami, aby uniknąć błędów i blokad. Przewodnik jest przeznaczony dla początkujących, ale zawiera też sekcje dla zaawansowanych użytkowników. Na końcu będziesz mieć gotowego do ponownego użycia aktora, działający schemat proxy, weryfikację wyników, checklisty, przegląd typowych błędów oraz wskazówki dotyczące optymalizacji. W razie potrzeby możesz rozbudować projekt, dodając planowanie, eksport do Google Sheets, integracje przez API i monitorowanie. Jeśli potrzebujesz szybkiej odpowiedzi na praktyczne pytanie, zupełnie

przejdź do sekcji FAQ, ale dla pełnych wyników przejdź przez wszystkie kroki.

Dla kogo ten przewodnik: dla tych, którzy chcą zrozumieć, jak uruchomić aktora Apify z proxy mobilnymi, nie spędzając tygodni na studiowaniu dokumentacji. Będzie to przydatne dla marketerów, analityków, badaczy, właścicieli projektów internetowych i początkujących programistów, którzy potrzebują niezawodnego i powtarzalnego zbierania danych z sieci.

Co warto wiedzieć wcześniej: podstawowe pojęcia JavaScript będą pomocne, ale nie są obowiązkowe. Szczegółowo opiszemy, gdzie klikać, co wpisywać i jak sprawdzić wyniki. Ważne jest, aby umieć zalogować się do usługi internetowej, kopiować tokeny dostępu oraz starannie pracować z hasłami.

Ile czasu może to zająć: 2–3 godziny na pełne przejście, w tym rejestracja, konfiguracja aktora, integracja proxy, uruchomienie testowe i weryfikacja wyników. Jeśli już masz konto Apify i dostęp do proxy mobilnych, zmieścisz się w 60–90 minut.

Wstępne przygotowanie

Wymagane narzędzia, programy i dostęp

  • Konto Apify z dostępem do uruchamiania aktorów.
  • Node.js w wersji LTS (18 lub wyższej) na lokalnym komputerze, jeśli chcesz edytować kod lokalnie. Możesz skorzystać z wbudowanego edytora w Apify, ale lokalnie jest wygodniej.
  • Dane logowania do proxy mobilnych. Jako przykład użyjemy dostawcy mobileproxy.space, gdzie możesz uzyskać login, hasło i adres serwera proxy. Możesz wybrać dowolną podobną usługę.
  • Edytor tekstu: VS Code lub inny.
  • Apify CLI (opcjonalnie) do lokalnego rozwoju i przesyłania aktora do chmury.

Wymagania systemowe

  • Stabilny dostęp do internetu.
  • Windows, macOS lub Linux. Do lokalnej pracy z aktorem nadaje się każdy nowoczesny komputer.
  • Wolne 200–500 MB na dysku pod zależności npm, jeśli zdecydujesz się na lokalny rozwój.

Co musisz pobrać i zainstalować

  1. Zainstaluj Node.js ze strony oficjalnej, wybierz LTS. Po instalacji sprawdź w terminalu za pomocą: node -v i npm -v. Powinieneś zobaczyć wersje bez błędów.
  2. Zainstaluj Apify CLI (opcjonalnie) za pomocą komendy: npm i -g apify-cli. Po instalacji sprawdź: apify --version.
  3. Przygotuj dane logowania do proxy mobilnych: host, port, login i hasło. Jeśli korzystasz z mobileproxy.space, otrzymasz adres w formacie host:port oraz parę user:password.

⚠️ Uwaga: Nigdy nie publikuj loginów i haseł proxy w otwartych repozytoriach. Używaj zmiennych środowiskowych lub sekretów platformy.

Tworzenie kopii zapasowych

Jeśli edytujesz kod lokalnie, trzymaj kopię zapasową projektu (na przykład przy pomocy git). W Apify sama platforma przechowuje wersje aktorów, ale lepiej mieć lokalny backup kodu.

Porada: Jeśli pierwszy raz pracujesz z Apify, rozpocznij bezpośrednio w przeglądarce przez edytor w interfejsie platformy, a lokalny rozwój dodaj później. To przyspieszy start.

Podstawowe pojęcia oraz co to jest Apify

Kluczowe terminy w prostych słowach

  • Apify — platforma do automatyzacji pracy w sieci: scraping, crawling, integracje. Pozwala uruchamiać kod (aktorzy) w chmurze, przechowywać wyniki (Datasets) oraz zarządzać kolejkami linków.
  • Aktor — konteneryzowana aplikacja (najczęściej w Node.js lub Python), która wykonuje twoje zadanie: otwiera strony, zbiera dane, zapisuje wyniki.
  • Zadanie (Task) — zapisana konfiguracja uruchomienia aktora z wstępnie wypełnionym wejściem. Wygodne dla regularnych uruchomień bez zmiany kodu.
  • Dataset — miejsce przechowywania wyników scrapingu w formie tabeli. Można eksportować do JSON, CSV, XLSX.
  • Key-Value Store — miejsce przechowywania dowolnych plików i ustawień (np. parametry wejściowe, raporty).
  • Request Queue — kolejka linków dla crawlera, aby systematycznie przechowywać i przetwarzać URL.
  • ProxyConfiguration — konfiguracja proxy. Można używać proxy Apify lub zewnętrznych, w tym mobilnych.
  • Proxy mobilne — proxy wykorzystujące mobilne sieci operatorów. Często są postrzegane przez strony jako rzeczywisty ruch mobilny.

Podstawowe zasady działania

Piszesz aktora, przekazujesz mu parametry wejściowe i uruchamiasz w chmurze. Aktor otrzymuje listę linków, otwiera je za pomocą wybranego crawlera (na przykład CheerioCrawler dla prostych stron HTML lub PlaywrightCrawler dla skomplikowanych witryn), zbiera dane i zapisuje je w Dataset. Do zapytań sieciowych aktor używa proxy zgodnie z ProxyConfiguration. Gdy potrzebny jest odporny zbiór z niskim poziomem fałszywych aktywacji ochrony, stosuje się proxy mobilne. Pozwalają one rozłożyć obciążenie i wyglądać dla celu jak mobilny użytkownik.

Co ważne zrozumieć przed rozpoczęciem

  • Przestrzegaj zasad docelowych witryn i obowiązującego prawa. Używaj zbierania danych w sposób etyczny i legalny.
  • Nawet proxy mobilne nie dają odporności na ograniczenia. Ważne są tempo zapytań, opóźnienia, prawidłowe nagłówki HTTP i jakość kodu crawlera.
  • Limity platformy Apify i twojego planu taryfowego wpływają na równoległość, pamięć i czas wykonania. To należy ustawić i kontrolować.

Porada: Jeśli cel zapewnia oficjalne API, zacznij od niego. To stabilniejsze i bardziej etyczne niż parsowanie HTML.

Krok 1: Po co mobilne proxy w chmurowym scrapingu

Cel etapu

Zrozumieć, w jakich przypadkach mobilne proxy przynoszą najlepsze rezultaty i jak dobrać ustawienia, aby zminimalizować blokady i niestabilność podczas pracy z chmury.

Szczegółowa instrukcja krok po kroku

  1. Określ cel zbierania danych: lista produktów, ceny, opinie, harmonogramy, wiadomości. Zapisz konkretne typy stron i ich przybliżone URL.
  2. Oceń trudność strony: czy strona otwiera się bez JavaScript, jak szybko się ładuje, czy występuje dynamiczne ładowanie. Jeśli strona jest prosta, wystarczy CheerioCrawler; jeśli skomplikowana — użyj PlaywrightCrawler.
  3. Zdecyduj, czy potrzebujesz mobilnej sesji: jeśli strona jest wyraźnie ukierunkowana na mobilnych użytkowników, pokazuje różne wersje stron dla klientów mobilnych i desktopowych, proxy mobilne pomogą wyglądać naturalnie.
  4. Wybierz dostawcę proxy mobilnych. Jako przykład można użyć mobileproxy.space. Upewnij się, że masz stabilny host, port, login i hasło. Zapisz je osobno.
  5. Zaplanowanie częstotliwości zapytań. Zacznij od 1–2 jednoczesnych zakładek i 1–3 zapytań na sekundę. W razie potrzeby zwiększaj płynnie, obserwując błędy i odpowiedzi strony.
  6. Decyduj, czy będziesz używać rotacji IP. W przypadku proxy mobilnych rotacja może następować na polecenie lub według timera u dostawcy. Ustal politykę i polecenia rotacji u twojego dostawcy.

Ważne punkty

Proxy mobilne sprawdzają się, gdy trzeba zredukować prawdopodobieństwo fałszywych aktywacji lub naśladować zachowanie mobilnego klienta. Nie używaj ich do działań zakazanych przez stronę lub prawo. Prawidłowo ustawiaj nagłówki User-Agent i opóźnienia.

⚠️ Uwaga: Nie próbuj obejść technicznych ograniczeń stron. Jeśli strona jest zablokowana autoryzacją lub warunkami użytkowania, działaj zgodnie z zasadami serwisu.

Oczekiwane rezultaty

Rozumiesz, po co stosowane są mobilne proxy, wybrałeś dostawcę i jesteś gotowy do konfiguracji w aktorze. Masz dane logowania do proxy i plan częstotliwości zapytań.

Możliwe problemy i ich rozwiązania

  • Nie jest jasne, czy mobilna wersja jest potrzebna. Pomoc: otwórz stronę z mobilnym User-Agent w narzędziach dewelopera i porównaj strukturę. Jeśli różnica jest znaczna, mobilna sesja jest uzasadniona.
  • Wątpliwości co do niezawodności dostawcy. Pomoc: przetestuj połączenie przez curl z twoim proxy, sprawdź stabilność przez 10–15 minut.

✅ Weryfikacja: Masz dokładne parametry proxy (host, port, login, hasło) i zanotowałeś pożądaną częstotliwość zapytań.

Krok 2: Rejestracja w Apify i przygotowanie środowiska pracy

Cel etapu

Stworzyć lub potwierdzić konto Apify, zalogować się do konsoli, w razie potrzeby zainstalować Apify CLI i przygotować się do stworzenia aktora.

Szczegółowa instrukcja krok po kroku

  1. Zarejestruj się w Apify. Wprowadź e-mail, wymyśl hasło i potwierdź e-mail. Po zalogowaniu otworzy się konsola z sekcjami Actors, Tasks, Storage.
  2. Przejdź do profilu i znajdź swój osobisty token API. Skopiuj go w bezpieczne miejsce, będzie przydatny do CLI i integracji.
  3. Jeśli używasz CLI: zainstaluj apify-cli za pomocą komendy npm i -g apify-cli. Następnie wykonaj apify login i wklej token. Po pomyślnym logowaniu zobaczysz potwierdzenie w terminalu.
  4. Stwórz lokalnie folder projektu, jeśli idziesz przez lokalny rozwój. Wykonaj apify create i wybierz szablon w Node.js z Crawlee. Zostanie utworzona struktura projektu z package.json i src/main.js.
  5. Jeśli pracujesz tylko w przeglądarce: naciśnij New w sekcji Actors i wybierz szablon Node.js + Crawlee. Platforma stworzy pustego aktora i otworzy edytor online.

Ważne punkty

Bezpieczeństwo tokena jest kluczowe. Nie wstawiaj tokena do kodu. Przechowuj go w menedżerze haseł. W CLI jest przechowywany lokalnie i nie trafia do repozytoriów, jeśli nie dodasz go ręcznie.

Porada: Nadaj aktorowi znaczącą nazwę, na przykład mobile-crawler-products. To ułatwi nawigację i automatyzację.

Oczekiwane rezultaty

Zalogowałeś się do konsoli Apify, w razie potrzeby skonfigurowałeś CLI, stworzyłeś pustego aktora i widzisz plik main.js w edytorze (lub lokalnie w folderze src).

Możliwe problemy i ich rozwiązania

  • CLI nie widzi tokena. Pomoc: uruchom apify logout i ponownie apify login. Sprawdź, czy wpisujesz aktualny token z profilu.
  • Błędy instalacji zależności npm. Pomoc: zaktualizuj Node.js do wersji LTS, wyczyść cache npm poleceniem npm cache clean --force i spróbuj ponownie zainstalować.

✅ Weryfikacja: Masz stworzonego aktora z dostępem do edytowania kodu i podstawową strukturą projektu na miejscu.

Krok 3: Utworzenie aktora i załadowanie szablonu

Cel etapu

Wypełnić aktora startowym kodem na Crawlee, aby móc od razu uruchomić crawlera i upewnić się w podstawowej funkcjonalności bez proxy.

Szczegółowa instrukcja krok po kroku

  1. Otwórz plik main.js. Jeśli go nie ma, stwórz src/main.js. Upewnij się, że package.json zawiera zależności crawlee i apify.
  2. Wklej podstawowy kod crawlera. Przykład dla CheerioCrawler: import { CheerioCrawler, Dataset } from "crawlee"; export const main = async () => { const startUrls = ["https://example.com/"]; const crawler = new CheerioCrawler({ requestHandler: async ({ request, $, log }) => { const title = $("title").text(); await Dataset.pushData({ url: request.loadedUrl, title }); log.info(`Saved: ${request.loadedUrl}`); }, maxConcurrency: 2, requestHandlerTimeoutSecs: 60, }); for (const url of startUrls) await crawler.addRequests([url]); await crawler.run(); };
  3. Zapisz plik. Jeśli jesteś w przeglądarce, naciśnij przycisk Save. Jeśli lokalnie, zapisz zmiany i wykonaj npm install, aby pobrać biblioteki (jeśli nie zostały pobrane).
  4. Spróbuj uruchomić bez proxy: uruchom aktora z domyślnymi danymi wejściowymi. W Dataset powinien pojawić się przynajmniej jeden obiekt z polem title.

Ważne punkty

Minimalny MVP aktora jest potrzebny, aby sprawdzić pipeline: uruchamianie, logowanie, zapisywanie wyników. Zanim dodasz proxy, upewnij się, że kod działa na prostej stronie.

Porada: Zaczynaj od jednej lub dwóch startowych linków. To przyspieszy testy i ułatwi znajdowanie problemów.

Oczekiwane rezultaty

Aktor uruchamia się pomyślnie i zapisuje wyniki w Dataset. Widzisz logi, w których określono, że dane zostały zapisane, i brak błędów typu DNS lub timeoutów sieciowych.

Możliwe problemy i ich rozwiązania

  • Błąd importu pakietów. Pomoc: sprawdź wersje w package.json. W razie potrzeby wykonaj npm i crawlee apify.
  • Brak danych w Dataset. Pomoc: sprawdź selektor $("title").text() lub zmień na inną prostą próbkę, na przykład $("h1").first().text().

✅ Weryfikacja: W Dataset pojawił się przynajmniej jeden obiekt z polami url i title. Logi pokazują pomyślne zakończenie bez wyjątków.

Krok 4: Konfiguracja proxy w aktorze

Cel etapu

Podłączyć mobilne proxy do aktora Apify tak, aby cały ruch sieciowy crawlera przechodził przez wskazany serwer proxy, i upewnić się w stabilności połączenia.

Szczegółowa instrukcja krok po kroku

  1. Przygotuj ciąg proxy. Format dla zewnętrznego proxy HTTP: http://USERNAME:PASSWORD@HOST:PORT. Przykład: http://user123:pass456@proxy.mobileproxy.space:12345. Dla mobileproxy.space użyj danych logowania z osobistego panelu.
  2. Dodaj ProxyConfiguration do kodu. Dla CheerioCrawler: import { CheerioCrawler, Dataset, ProxyConfiguration } from "crawlee"; export const main = async () => { const proxy = new ProxyConfiguration({ proxyUrls: ["http://USERNAME:PASSWORD@HOST:PORT"] }); const crawler = new CheerioCrawler({ proxyConfiguration: proxy, requestHandler: async ({ request, $, log }) => { const title = $("title").text(); await Dataset.pushData({ url: request.loadedUrl, title }); log.info(`Saved: ${request.loadedUrl}`); }, maxConcurrency: 2, requestHandlerTimeoutSecs: 60, }); await crawler.addRequests(["https://httpbin.org/ip"]); await crawler.run(); };
  3. Zapisz zmiany i uruchom aktora. Jeśli wszystko jest poprawne, w Dataset zobaczysz adres IP, który należy do Twojego mobilnego proxy (dla httpbin.org/ip będzie to JSON z origin lub IP proxy).
  4. Jeśli używasz PlaywrightCrawler, dodaj tę samą ProxyConfiguration do parametrów konstruktora: import { PlaywrightCrawler, Dataset, ProxyConfiguration } from "crawlee"; const proxy = new ProxyConfiguration({ proxyUrls: ["http://USERNAME:PASSWORD@HOST:PORT"] }); const crawler = new PlaywrightCrawler({ proxyConfiguration: proxy, launchContext: { launchOptions: { headless: true } }, requestHandler: async ({ page, request, log }) => { const title = await page.title(); await Dataset.pushData({ url: request.loadedUrl, title }); log.info(`Saved: ${request.loadedUrl}`); } });
  5. W razie potrzeby wydziel ciąg proxy do zmiennej środowiskowej i odczytaj przez process.env, aby nie przechowywać hasła w kodzie. Na platformie Apify używaj sekcji Secrets i ENV Vars w ustawieniach aktora. Przykład: const proxyUrl = process.env.MOBILE_PROXY_URL;

Ważne punkty

Nie mieszaj jednocześnie proxy Apify i zewnętrznej konfiguracji proxy mobilnych. W obrębie jednego uruchomienia używaj jednego zrozumiałego źródła proxy. Ustawienie przez proxyUrls całkowicie zastępuje użycie proxy Apify.

Porada: Najpierw przetestuj proxy na prostych stronach, takich jak https://httpbin.org/ip lub podobnych serwisach pokazujących IP. W ten sposób od razu zrozumiesz, że ruch przechodzi przez odpowiedni adres.

⚠️ Uwaga: Jeśli dostawca proxy mobilnych obsługuje rotację IP poprzez specjalny adres URL lub polecenie, używaj tego tylko w ramach jego zasad. Nie zmieniaj IP zbyt często bez potrzeby: to może budzić podejrzenia w docelowych witrynach.

Oczekiwane rezultaty

Crawler został pomyślnie podłączony do mobilnego proxy. Przy sprawdzaniu IP (przez stronę kontrolną) widzisz adres proxy, logi są stabilne, a zapytania nie znikają przez czas oczekiwania.

Możliwe problemy i ich rozwiązania

  • 401 lub 407 w logach. Przyczyna: błędny login lub hasło. Rozwiązanie: sprawdź dane logowania z panelu dostawcy.
  • ECONNRESET lub ETIMEDOUT. Przyczyna: niestabilność kanału lub blokada domeny. Rozwiązanie: zmniejsz równoległość, uruchom ponownie po przerwie, sprawdź status proxy u dostawcy.

✅ Weryfikacja: Dataset zawiera wynik zapytania na stronę z wyświetlaniem IP, a tam widoczny jest adres mobilnego proxy.

Krok 5: Przykład zadania: zbieranie danych z kart produktów

Cel etapu

Zebrać dane z rzeczywistych kart produktów, używając proxy mobilnych i odpornych ustawień crawlera, oraz zapisać wyniki w Dataset.

Szczegółowa instrukcja krok po kroku

  1. Określ celowy zestaw URL kart lub kategorii, gdzie można bezpiecznie i legalnie zbierać otwarte dane. Zapisz 3–5 linków do testów.
  2. Wybierz crawlera. Jeśli strona jest statyczna, użyj CheerioCrawler. Jeśli dane ładują się dynamicznie, wybierz PlaywrightCrawler.
  3. Dodaj główne selektory do wyciągania danych. Na przykład: nazwa produktu, cena, waluta, ocena, dostępność. W Cheerio będą to selektory podobne do jQuery; w Playwright — page.locator.
  4. Przykład dla CheerioCrawler: import { CheerioCrawler, Dataset, ProxyConfiguration, log } from "crawlee"; export const main = async () => { log.setLevel(log.LEVELS.INFO); const proxy = new ProxyConfiguration({ proxyUrls: [process.env.MOBILE_PROXY_URL] }); const startUrls = ["https://example.com/product/1", "https://example.com/product/2"]; const crawler = new CheerioCrawler({ proxyConfiguration: proxy, maxConcurrency: 2, requestHandlerTimeoutSecs: 90, requestHandler: async ({ request, $, log }) => { const title = $("h1.product-title").text().trim(); const priceText = $("span.price").text().trim(); const availability = $("div.stock").text().trim(); const currency = priceText.replace(/[0-9.,\s]/g, ""); const price = parseFloat(priceText.replace(/[^0-9.,]/g, "").replace(",", ".")) || null; await Dataset.pushData({ url: request.loadedUrl, title, price, currency, availability }); log.info(`Saved: ${title || "no title"}`); }, failedRequestHandler: async ({ request, log }) => { log.warning(`Failed ${request.url}`); } }); await crawler.addRequests(startUrls); await crawler.run(); };
  5. Przykład dla PlaywrightCrawler: import { PlaywrightCrawler, Dataset, ProxyConfiguration } from "crawlee"; export const main = async () => { const proxy = new ProxyConfiguration({ proxyUrls: [process.env.MOBILE_PROXY_URL] }); const startUrls = ["https://example.com/product/1"]; const crawler = new PlaywrightCrawler({ proxyConfiguration: proxy, requestHandlerTimeoutSecs: 120, launchContext: { launchOptions: { headless: true } }, requestHandler: async ({ page, request, log }) => { await page.waitForLoadState("domcontentloaded"); const title = await page.title(); const price = await page.locator("span.price").first().textContent().catch(() => null); await Dataset.pushData({ url: request.loadedUrl, title, price }); log.info(`Saved: ${request.loadedUrl}`); } }); await crawler.addRequests(startUrls); await crawler.run(); };
  6. Zapisz MOBILE_PROXY_URL w zmiennych środowiskowych aktora na platformie Apify (sekcja Ustawienia → Zmienne środowiskowe). Wartość: twój ciąg proxy w formacie http://user:pass@host:port.
  7. Uruchom aktora. W logach obserwuj status zapytania, czas odpowiedzi oraz liczbę pomyślnie zapisanych rekordów.

Ważne punkty

Struktura danych w Dataset musi być przewidywalna: zdefiniuj te same pola dla wszystkich kart, w przeciwnym razie eksport do tabel będzie uciążliwy. Kontroluj timeouty: dla stron dynamicznych zwiększ requestHandlerTimeoutSecs i dodaj oczekiwanie na załadowanie kluczowych selektorów.

Porada: Aby ładowanie było płynne, ustaw min/max opóźnienia między zapytaniami za pomocą autoscaled pool lub ręcznie dodawaj przerwy w obsłudze.

Oczekiwane rezultaty

Dataset zawiera po jednej biblografii na kartę produktu z kluczowymi polami. Logi są stabilne, nie występują błędy autoryzacji proxy, a średni czas odpowiedzi jest akceptowalny dla twojego przypadku.

Możliwe problemy i ich rozwiązania

  • Niepoprawne selektory. Przyczyna: responsywne układ lub różna struktura strony. Rozwiązanie: sprawdź wersję mobilną i desktopową, użyj bardziej odpornych selektorów (atrybuty data, unikalne id).
  • Puste dane w niektórych polach. Przyczyna: wartości ładują się dynamicznie. Rozwiązanie: dodaj jawne oczekiwanie na potrzebne elementy lub użyj Playwright zamiast Cheerio.

✅ Weryfikacja: W Dataset znajdują się rekordy z url, title albo równoważnymi polami. Średni procent błędów jest niski i poniżej 5–10% na próbce testowej.

Krok 6: Limity i optymalizacja

Cel etapu

Skonfigurować równoległość, timeouty, ponowne próby, rotację i przechowywanie, aby oszczędzać limity Apify i zwiększyć odporność zbierania.

Szczegółowa instrukcja krok po kroku

  1. Ogranicz równoległość. W parametrach crawlera ustaw maxConcurrency od 1 do 3 na początku. Zwiększaj stopniowo. Im wyższa równoległość, tym wyższe obciążenie na proxy i stronie.
  2. Skonfiguruj ponowne próby. W Crawlee są retryCount i retryTimeoutMillis. Ustaw retryCount = 1–2, aby nie szarpać problematycznych stron nieskończenie.
  3. Zarządzaj czasem wykonania. Zwiększ requestHandlerTimeoutSecs do 90–120 dla ciężkich stron. To zmniejszy fałszywe timeouty przy wolnych odpowiedziach przez mobilną sieć.
  4. Dodaj losowe opóźnienia. Pomiędzy zapytaniami wstawiaj niewielkie przerwy 300–1500 ms. To wygląda naturalniej i zmniejsza ryzyko ograniczeń.
  5. Planuj rotację proxy u dostawcy w rozsądnych granicach. Jeśli mobileproxy.space pozwala na żądanie nowego IP według timera, wybierz interwał, który nie narusza stabilności sesji.
  6. Obserwuj limity Apify: pamięć, CPU, czas. W ustawieniach uruchamiania określ Memory (na przykład 1024–2048 MB dla Playwright) i Max run time (na przykład 30–60 minut dla batche).
  7. Przechowuj tylko potrzebne pola. Im mniej zbędnych danych w Dataset, tym mniejsze obciążenie dla magazynu i szybszy eksport. Usuwaj fragmenty HTML bez potrzeby.
  8. Włącz logowanie na poziomie INFO i selektywnie na DEBUG podczas debugowania. Nadmierna ilość logów może przeszkadzać w czytaniu i nie jest potrzebna w trybie stabilnym.

Ważne punkty

Osłabienie limitów osiąga się dzięki kilku prostym zasadom: niska początkowa równoległość, krótkie ponowne próby, precyzyjne selektory i minimalizacja zbędnych zapytań na stronie. Obserwacja przez logi i monitorowania pomaga dostosować ustawienia.

Porada: Fiksuj sukcesywnie URL w Key-Value Store lub zewnętrznej pamięci. To uprości ponowne uruchomienie w przypadku awarii i nie pozwoli ponownie przetwarzać już zebranych stron.

Oczekiwane rezultaty

Aktor działa płynnie, nie zużywa zbędnych zasobów, a błędy występują rzadko i przewidywalnie. Parametry timeoutów i równoległości są dobrane do prędkości twojego proxy mobilnego i złożoności witryny.

Możliwe problemy i ich rozwiązania

  • Zwiększenie timeoutów nie pomaga. Przyczyna: przeciążenie strony lub problemy dostawcy. Rozwiązanie: tymczasowo zmniejsz równoległość do 1 i sprawdź stabilność połączenia.
  • Zbyt wolna prędkość. Przyczyna: wąskie miejsce w sieci proxy lub ciężka strona. Rozwiązanie: zwiększ opóźnienia, ale pomyśl jednocześnie o podziale zadań na mniejsze batche.

✅ Weryfikacja: Średni czas na stronę stabilny, procent błędów nie rośnie przy zwiększaniu objętości, a limity pamięci i czasu nie są przekraczane.

Weryfikacja wyników

Checklist: co powinno działać

  • Aktor uruchamia się bez błędów i prawidłowo kończy pracę.
  • Mobilne proxy podłączone, a IP w weryfikacyjnych zapytaniach odpowiada proxy.
  • Dataset zawiera oczekiwane pola i wartości.
  • Logi są informacyjne, ale nie przeładowane.
  • Przy ponownym uruchomieniu nie ma zbędnych duplikatów (lub są kontrolowane).

Jak przetestować

  1. Uruchom aktora na 2–3 testowych URL z włączonym proxy i sprawdź IP przez stronę-indykator.
  2. Porównaj liczby: ile zapytań zostało dodanych i ile wyników otrzymałeś. Powinny się zgadzać lub różnić w granicach zrozumiałego błędu.
  3. Eksportuj Dataset do CSV i upewnij się, że dane są czyste: bez null, tam gdzie oczekujesz wartości.

Wskaźniki udanego wykonania

  • Procent nieudanych zapytań poniżej 5–10% na teście.
  • Średni czas przetwarzania strony stabilny i przewidywalny.
  • Brak anomalii w czasie oczekiwania i błędów autoryzacji proxy.

Porada: Zapisz kontrolny zestaw URL i powtarzaj test przed każdym większym wprowadzeniem zmian w kodzie. W ten sposób szybko wyłapiesz regresje.

Typowe błędy i rozwiązania

  • Problem: 407 Proxy Authentication Required. Przyczyna: błędne dane logowania proxy. Rozwiązanie: sprawdź login i hasło, zaktualizuj zmienne środowiskowe i uruchom ponownie aktora.
  • Problem: ECONNRESET i ETIMEDOUT w logach. Przyczyna: niestabilność sieci lub przeciążenie. Rozwiązanie: zmniejsz maxConcurrency, zwiększ timeouty i zrób przerwy między zapytaniami.
  • Problem: puste pola w Dataset. Przyczyna: niepoprawne selektory lub dynamiczne ładowanie. Rozwiązanie: użyj PlaywrightCrawler, dodaj oczekiwania, przemyśl selektory.
  • Problem: limit pamięci osiągnięty. Przyczyna: zbyt wiele równoległych zakładek lub przechowujesz zbędne dane. Rozwiązanie: zmniejsz równoległość, ogranicz zbiór danych, zwiększ Memory w ustawieniach uruchomienia.
  • Problem: zbyt wolne zbieranie. Przyczyna: ciężkie strony i mobilna sieć. Rozwiązanie: skoncentruj się na kolejce ważności danych, podziel zadanie na batche, zoptymalizuj selektory i wyłącz zbędne nawigacje.
  • Problem: duplikaty w wynikach. Przyczyna: ponowne uruchomienie z tymi samymi URL bez filtracji. Rozwiązanie: prowadź listę przetworzonych linków w Request Queue z unikalizacją lub sprawdzaj duplikaty przed zapisaniem.
  • Problem: wrażliwa strona reaguje na częste zapytania. Przyczyna: zbyt agresywne tempo. Rozwiązanie: zmniejszyć prędkość, dodać jitter opóźnień, używać prawidłowych nagłówków i aktualnego User-Agent.

Porada: Podczas debugowania tymczasowo włącz szczegółowe logi dla jednego lub dwóch URL i analizuj każdy krok. To szybsze niż rozwiązywać problemy w długich batche.

Dodatkowe możliwości

Zaawansowane ustawienia

  • Sekrety i konfiguracje. Przechowuj MOBILE_PROXY_URL i inne klucze w sekcji Secrets. W kodzie czytaj przez process.env.
  • Zmiana User-Agent. Aby naśladować mobilnego klienta, ustal mobilny User-Agent oraz odpowiednią szerokość viewport w Playwright. Rób to umiarkowanie i tylko jeśli to konieczne dla poprawnego wyświetlania strony.
  • Planowanie zadań. Utwórz Task i zaplanuj harmonogram uruchomień (codziennie, co godzinę). Obserwuj limity i objętość wyników.

Optymalizacja

  • Cache. Jeśli strony rzadko się zmieniają, dodaj cache zapytań i kolejnych wizyt, aby nie marnować proxy i limitów w niepotrzebny sposób.
  • Kolejki i priorytety. Pracuj przez Request Queue, nadając priorytet ważnym linkom i pomijając drugorzędne.
  • Podział na mikrousługi. Złożone zadanie podziel na kilka aktorów: zbieranie linków, przetwarzanie kart, walidacja i eksport.

Co jeszcze można zrobić

  • Integracje przez API. Podłącz wysyłanie wyników do swojego CRM lub systemu analitycznego po każdym uruchomieniu przez Webhook.
  • Walidacja danych. Przed eksportem sprawdzaj schematy: aby wszystkie wartości odpowiadały oczekiwanemu typowi i zakresowi.
  • Wewnętrzne linki w dokumencie. W razie potrzeby wróć do sekcji Limity i optymalizacja podczas ustawiania wydajności.

Porada: Używaj trybu podglądu i małych batchy do pierwszego przebiegu w harmonogramie, a następnie stopniowo zwiększaj.

FAQ

  • Jak upewnić się, że proxy rzeczywiście jest mobilne? Sprawdź ASN i typ sieci według IP za pomocą zewnętrznych baz danych i porównaj z operatorami mobilnymi. Zazwyczaj mobilne proxy mają charakterystyczny pul adresów z dynamiką zmian.
  • Czy można używać jednocześnie kilku proxy mobilnych? Tak, podaj kilka proxyUrls. Crawlee automatycznie wybierze jedno z listy. Obserwuj limity każdego proxy.
  • Co zrobić, jeśli strona pokazuje CAPTCHA? Zmniejsz częstotliwość, dodaj opóźnienia, sprawdź nagłówki i rozważ użycie oficjalnego API źródła. Unikaj działań naruszających zasady strony.
  • Jak bezpiecznie przechowywać hasła proxy? Używaj zmiennych środowiskowych i Secrets na platformie Apify. Nie umieszczaj haseł w git.
  • Czy trzeba zmieniać User-Agent na mobilny? Tylko jeśli witryna zwraca różne wersje strony. W przeciwnym razie wystarczy stabilne zachowanie i prawidłowe opóźnienia.
  • Czemu CheerioCrawler jest szybszy? Nie renderuje strony, a analizuje HTML. Dla dynamicznych stron używaj PlaywrightCrawler, chociaż jest wolniejszy.
  • Jak eksportować wyniki? W interfejsie Dataset wybierz eksport do CSV, JSON, XLSX. Lub użyj API Datasets, jeśli chcesz zautomatyzować eksport.
  • Czy można łączyć proxy Apify i mobilne proxy? W jednym uruchomieniu lepiej używać czegoś jednego. Jeśli potrzebujesz różnych źródeł, podziel zadania według aktora lub konfiguracji uruchomień.
  • Ile zapytań na sekundę jest bezpieczne? Zacznij od 1–3 na sekundę i śledź metryki. Dla wrażliwych witryn zmniejsz do 0.2–0.5 z przerwami.
  • Czy trzeba włączać headful w Playwright? Tylko dla debugowania. W produkcji używaj headless dla oszczędności zasobów.

Podsumowanie

Skonfigurowałeś działającego aktora Apify z mobilnymi proxy, zrozumiałeś kluczowe pojęcia i zasady, zebrałeś dane testowe z kart produktów i zoptymalizowałeś limity. Teraz pewnie zarządzasz równoległością, czasem oczekiwania i przechowywaniem wyników, a także wiesz, jak zabezpieczyć sekrety i hasła. Możesz dalej rozwijać projekt: dodawać nowe typy stron, budować pipeline z kilku aktorów, podłączać planowanie i automatyczne eksporty. W razie konkretnej potrzeby, wróć do sekcji FAQ lub do Limitów i optymalizacji. Pamiętaj, że mobilne proxy to narzędzie zwiększające stabilność i naturalność ruchu, a nie sposób na obejście ograniczeń. Pracuj etycznie, przestrzegaj zasad stron i zawsze zaczynaj od małego, sprawdzając każdą zmianę.