Python Web Scraping w 2026 r.: httpx + BeautifulSoup + Dramat — Kiedy używać którego
Większość samouczków „Skrobanie sieci w Pythonie” z 2018 roku nadal zaleca requests + BeautifulSoup. Część „żądania” jest w porządku, ale są teraz lepsze ustawienia domyślne, a połowa współczesnej sieci renderuje treść w JavaScript, więc klasyczny stos po cichu zwraca puste strony.
W tym przewodniku omówiono drzewo decyzyjne na rok 2026: kiedy httpx + BeautifulSoup jest właściwe (nadal ponad 90% witryn), kiedy sięgnąć po Playwright, jak uniknąć zablokowania oraz dwie zasady, dzięki którym Twój skrobak będzie zarówno legalny, jak i etyczny.
Drzewo decyzyjne na jednym obrazie
To wszystko. Dziewięćdziesiąt procent zadań skrobania to statyczny kod HTML — klasyczny stos (zmieniona nazwa) jest właściwym narzędziem. Reszta wymaga wykonania JS, a współczesną odpowiedzią jest Playwright.
Krok 1: httpx + BeautifulSoup (przypadek 90%)
„httpx” to rozwijany zamiennik „żądań”. To samo API, plus obsługa HTTP/2 i natywna asynchronizacja. BeautifulSoup nie uległo zmianie od 2015 roku — wybór parsera ma znaczenie (lxml jest 5 razy szybszy niż domyślny).
Kluczowe wybory:
- `headers={"User-Agent": ...}` — zawsze ustawiaj prawdziwe UA (adres kontaktowy jest uprzejmy). Domyślny interfejs użytkownika
httpxjest często blokowany. - `timeout=10` — nigdy nie wykonuj nieograniczonego żądania; zawieszone połączenia przeciekają deskryptory plików.
- `raise_for_status()` — podbija na 4xx/5xx, więc awarie są głośne, a nie ciche.
- `"lxml"` parser — 5 razy szybszy niż domyślny
html.parseri bardziej wyrozumiały w przypadku zniekształconego kodu HTML. - `soup.select("css-selector")` — traktuj skrobanie jako „udawaj, że używasz
document.querySelectorAllJavaScriptu”. Selektory CSS są zwykle tym, czego chcesz, a nie API poruszającym się po drzewach.
Krok 2: Dramaturg (kiedy JS renderuje treść)
Wiele nowoczesnych SPA (React, Vue, Angular) dostarcza pusty <div id="root"> i nawadnia wszystko po stronie klienta. httpx.get daje pustą powłokę — żądane dane są ładowane poprzez fetch po załadowaniu strony.
Test: httpx.get(url).text — wyszukaj żądane dane. Jeśli go tam nie ma, witryna wymaga wykonania JS.
Zainstaluj: pip install playwright && playwright install chromium (pobranie przeglądarki kosztuje ~ 150MB — warto raz, bolesne przy każdym uruchomieniu CI bez buforowania).
Koszt: Playwright jest 10-50 razy wolniejszy niż httpx (ładowanie strony + wykonanie JS + obciążenie przeglądarki). Sięgaj po niego tylko wtedy, gdy dane nie znajdują się w statycznym kodzie HTML.
Cztery sposoby na zablokowanie
Większość systemów zapobiegających zarysowaniu wykrywa cztery odciski palców:
1. Brakujący/oczywisty Agent użytkownika
2. Brak opóźnień między żądaniami
Surowe żądania sekwencyjne obciążają serwer. Dodaj opóźnienie proporcjonalne do czasu odpowiedzi — jeśli wyświetlenie strony zajmuje 500 ms, odczekaj 500–2000 ms między żądaniami. asyncio.sleep(random.uniform(0.5, 2.0)).
3. Żądanie /robots.txt niedozwolonych ścieżek
Niektóre witryny używają pliku „robots.txt” do uzyskania wiarygodnych sygnałów prędkości — sprawdź przed skrobaniem:
4. Niezgodność TLS/odcisku palca przeglądarki
Zaawansowane zabezpieczenie przed skrobaniem (Cloudflare, DataDome) umożliwia odcisk palca podczas uzgadniania TLS i środowiska JS. httpx w niczym nie przypomina Chrome w warstwie TLS. Opcje:
curl_cffi— biblioteka oparta na curl-impersonate, która naśladuje TLS prawdziwej przeglądarki.- Dramaturg — z definicji prawdziwa przeglądarka TLS.
- Rotacja proxy mieszkaniowych – opcja nuklearna.
W 99% przypadków użycia (strony niewrogie, umiarkowana głośność, brak konieczności logowania) wystarczy szacunek httpx + prawdziwe UA + opóźnienie + robots.txt. Jeśli skrobasz witryny chronione przez Cloudflare na dużą skalę, potrzebujesz prawdziwych przeglądarek lub płatnych usług odblokowywania.
Ograniczanie szybkości (semafor + wzorzec snu)
Do zbiorczego skrobania połącz asyncio.Semaphore (maksymalnie współbieżne) z asyncio.sleep (opóźnienie na żądanie):
Ograniczenie do 5-10 jednoczesnych + 500 ms-2 s opóźnienia na żądanie utrzymuje Cię znacznie poniżej poziomu wyzwalającego alarmy ograniczenia szybkości w większości witryn.
Zasady prawne + etyczne
1. Przeczytaj Warunki korzystania z usługi na stronie. Wiele z nich wprost zabrania skrobania — nadal możesz to zrobić (W większości jurysdykcji ToS to prawo umów, a nie prawo karne), ale podejmujesz ryzyko prawne. LinkedIn przeciwko hiQ (2022) ustaliło, że pobieranie publicznie widocznych danych nie stanowi naruszenia ustawy CFAA w USA, ale noszenie bluzy z kapturem nie czyni Cię niewidzialnym.
2. Nie kopiuj danych osobowych. RODO / CCPA / wszystko inne karze zbieranie danych osobowych bez zgody. Jeśli tworzysz zbiór danych „pracowników firmy X”, przestań.
Dodatki etyczne, o których wszyscy zapominają:
- Wyślij prawdziwy adres kontaktowy w swoim UA. Jeśli Twój bot sprawia problemy, właściciel witryny powinien móc wysłać do Ciebie e-mail.
- Jeśli buforujesz dane witryny, buforuj agresywnie — nie uderzaj w ich serwery przy każdym uruchomieniu.
- Preferuj publiczne interfejsy API, nawet jeśli są płatne. Tańsze niż ryzyko prawne.
Podsumowanie narzędzi na rok 2026
| Zadanie | Sięgnij po |
|---|---|
| Statyczne strony HTML | httpx + PięknaZupa(html, "lxml") |
| SPA renderowane przez JS | dramaturg (bezgłowy Chrom) |
| Cloudflare / antybot | curl_cffi lub Dramaturg + proxy rezydentne |
| Skrobanie o dużej objętości | httpx.AsyncClient + Semafor + tryb uśpienia |
| Ustrukturyzowane dane API | httpx.get + .json() — nie potrzeba zupy |
Przeglądanie stron internetowych w 2026 r. to w 90% nadal „httpx + BeautifulSoup” plus wiedza, kiedy przejść do prawdziwej przeglądarki. Opanuj nawyki grzecznościowego skrobania (prawdziwe UA, semafor, sen, plik robots.txt), a zbudujesz trwałe potoki danych bez blokowania i pozywania.
Następny krok: ścieżka Data Science zawiera 15 lekcji na temat skrobania, ETL i pand — zbudujesz prawdziwy, kompleksowy potok od pobrania HTTP przez DataFrame do eksportu CSV.