Scarnox · Blog

Jak scrapować stronę chronioną przez Cloudflare (przewodnik 2026)

Cloudflare stoi przed dużą częścią publicznego internetu, więc scraper, który działa na jednej stronie, często uderzy w ścianę na następnej. Zazwyczaj zauważysz to po odpowiedzi HTTP 403 lub 503, stronie przejściowej „Just a moment...” albo widgecie Turnstile z polem wyboru na stronie. Ten przewodnik wyjaśnia, co sprawdza Cloudflare, poprawki, które działają bez dotykania tego, czego nie powinieneś dotykać, i miejsce, w którym pasuje rozwiązywanie captcha. Krótka odpowiedź: upewnij się, że wolno ci scrapować stronę, zwolnij, wysyłaj żądania wyglądające jak zwykły klient, używaj prawdziwej przeglądarki, gdy strona wymaga JavaScriptu, a dopiero potem zajmij się captcha. Turnstile to captcha, której Cloudflare używa najczęściej. Obsługa Turnstile w Scarnox jest wkrótce. Typem captcha obsługiwanym dziś na żywo jest PopularCaptcha.

Co sprawdza Cloudflare

Cloudflare ocenia każde żądanie na podstawie kilku sygnałów:

Wysoki wynik przechodzi po cichu. Średni wynik dostaje interaktywne wyzwanie. Niski wynik dostaje blokadę. Większość pracy polega na podniesieniu wyniku przez zachowanie jak dobrze wychowany klient, a nie przez walkę z tym sprawdzeniem.

Krok 1: sprawdź, czy wolno ci scrapować stronę

Zanim zaczniesz jakąkolwiek pracę techniczną, przeczytaj robots.txt i regulamin strony. Blokada to często właściciel, który coś ci komunikuje. Scrapowanie publicznych stron powoli i w jasnym celu to jedno. Przedzieranie się przez blokadę, żeby dotrzeć do danych, które właściciel ograniczył, to drugie, a Scarnox nie wspiera tego drugiego. Przegląd prawny omawia ogólne pytania.

Krok 2: poprawne zwykłe żądanie

Wiele scraperów, które wyglądają na „zablokowane”, po prostu wysyła słabe żądania. Najpierw napraw te rzeczy:

import random
import time
import requests

session = requests.Session()
session.headers.update({
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
                  "(KHTML, like Gecko) Chrome/124.0 Safari/537.36",
    "Accept-Language": "en-US,en;q=0.9",
})

def polite_get(url: str, attempts: int = 4) -> requests.Response:
    r = None
    for attempt in range(attempts):
        r = session.get(url, timeout=30)
        if r.status_code not in (429, 503):
            return r
        # Wykładniczy backoff z jitterem: około 1, 2, 4 sekundy plus szum.
        time.sleep(2 ** attempt + random.uniform(0, 1))
    return r

Jeśli to cię przepuści, jesteś gotowy. Zachowaj opóźnienie.

Krok 3: ustal, z jakim wyzwaniem masz do czynienia

Odpowiedź wiele ci mówi:

Sprawdzenie, który z tych przypadków widzisz, oszczędza mnóstwo zmarnowanego wysiłku.

Krok 4: używaj prawdziwej przeglądarki, gdy trzeba

Jeśli strona pokazuje treść dopiero po uruchomieniu JavaScriptu, zwykły klient HTTP jej nie zobaczy. Uruchom pełną przeglądarkę przez Playwright lub Selenium. Przeglądarka headless jest wykrywalna, więc przeczytaj wykrywanie headless browsera, zanim na niej polegasz, i ustaw ją tak, aby pasowała do środowiska, jakie miałby prawdziwy odwiedzający. Przewodnik o stronach JavaScript pokazuje kompletny przykład.

Krok 5: sprawdź reputację IP

Adresy z chmurowych centrów danych to najczęstszy powód, dla którego czyste żądanie dostaje niski wynik. Adresy rezydencjalne zwykle lepiej się oceniają, za cenę wolniejszej pracy i wyższego kosztu. Kompromis omawia proxy rezydencjalne a datacenter.

Rotacja ma własne pułapki. Zmiana adresu przy każdym żądaniu wygląda nienaturalnie, bo prawdziwy odwiedzający zachowuje jeden adres przez całą wizytę. Sesje sticky, w których jeden adres jest zachowywany dla zestawu powiązanych żądań, często radzą sobie lepiej niż szybka rotacja. Rotujące proxy do scrapingu wchodzi w szczegóły.

Krok 6: gdzie pasuje rozwiązywanie captcha

Czasem widget faktycznie się pojawia, na formularzu, który testujesz, albo na stronie, którą masz prawo automatyzować. Token Turnstile jest wtedy wymaganym krokiem w tym przepływie. Obsługa Turnstile w Scarnox jest wkrótce, więc nie buduj jeszcze produkcyjnego kodu na jej bazie. Typem captcha obsługiwanym dziś na żywo jest PopularCaptcha, który używa innego widgetu.

Ogólny przepływ dla dowolnej captcha opartej na tokenach jest ten sam. Odczytujesz sitekey ze strony, prosisz o token i umieszczasz token w polu formularza, którego oczekuje strona. Tokeny są krótkotrwałe, więc wysyłaj je od razu. Przewodnik PopularCaptcha w Pythonie pokazuje ten przepływ od początku do końca, a typy captcha wyjaśnione porównuje widgety, które napotkasz.

Jeśli chcesz być gotowy, gdy wsparcie Turnstile wejdzie do użytku, możesz zacząć darmowy okres próbny już teraz. Zacznij z darmowym kredytem próbnym, bez karty: załóż konto. Aktualne stawki dla dostępnego dziś typu captcha znajdziesz na stronie cennika.

Scrapuj odpowiedzialnie

Dalsze kroki