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:
- Reputacja IP. Adresy z chmurowych centrów danych zaczynają z niższym wynikiem niż adresy z domowych łączy.
- Tempo i wzorzec żądań. Setki żądań na sekundę z jednego adresu wyglądają jak bot, bez względu na nagłówki.
- Nagłówki i odcisk TLS. Goła biblioteka HTTP często wysyła nagłówki, ich kolejność i uścisk dłoni TLS, których nie wysyła żadna główna przeglądarka.
- Wykonanie JavaScriptu. Strona wyzwania uruchamia skrypty i sprawdza, czy obecne jest prawdziwe środowisko przeglądarki.
- Ciasteczka. Po zaliczeniu wyzwania Cloudflare wydaje ciasteczko clearance przypisane do tej sesji.
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:
- Wysyłaj aktualny User-Agent i nagłówki, które wysłałaby przeglądarka, na przykład
AcceptiAccept-Language. - Używaj jednego obiektu sesji, żeby ciasteczka utrzymywały się między żądaniami, tak jak w przeglądarce.
- Dodaj opóźnienie między żądaniami z odrobiną losowego jitteru.
- Cofaj się przy odpowiedziach
429i503, zamiast ponawiać w ciasnej pętli.
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:
- Strona „Just a moment...”. To wyzwanie JavaScript. Prawdziwa przeglądarka zwykle przechodzi je sama po kilku sekundach. Ciasteczko clearance można potem ponownie użyć w przyszłych żądaniach tej samej sesji.
- Widget Turnstile na formularzu lub stronie. To captcha. Potrzebuje tokena z widgetu, zanim formularz przyjmie wysłanie.
- Strona blokady z kodem błędu. Adres lub żądanie zostało odrzucone bez wyjątku. Zmiana tempa i naprawa żądań zwykle pomaga bardziej niż cokolwiek innego. Rozwiązanie nie zamieni twardej blokady w dane.
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
- Przeczytaj
robots.txti szanuj regulamin strony, którą scrapujesz. - Ogranicz tempo crawlera i uruchamiaj go w godzinach pozaszczytowych, jeśli to możliwe.
- Cache'uj odpowiedzi, żeby nigdy nie pobierać tej samej strony dwa razy bez powodu.
- Unikaj zbierania danych osobowych, chyba że masz do tego podstawę prawną.
- Jeśli strona ograniczyła dostęp, zatrzymaj się. Nie próbuj obchodzić ograniczenia.