Python Web Scraping v roku 2026: httpx + BeautifulSoup + Playwright – kedy použiť ktorý
Väčšina tutoriálov „Python web scraping“ z roku 2018 stále odporúča requests + BeautifulSoup. Časť „požiadavky“ je v poriadku, ale teraz existujú lepšie predvolené nastavenia a polovica moderného webu vykresľuje obsah v jazyku JavaScript, takže klasický zásobník potichu vracia prázdne stránky.
Táto príručka sa zaoberá rozhodovacím stromom z roku 2026: kedy je httpx + BeautifulSoup správny (stále viac ako 90 % stránok), kedy siahnuť po Playwright, ako sa vyhnúť zablokovaniu a dve pravidlá, vďaka ktorým je váš škrabák legálny aj etický.
Rozhodovací strom na jednom obrázku
To je všetko. Deväťdesiat percent úloh zoškrabovania sú statické HTML — klasický zásobník (premenovaný) je tým správnym nástrojom. Zvyšok potrebuje JS prevedenie a Playwright je moderná odpoveď.
Krok 1: httpx + BeautifulSoup (90% prípad)
„httpx“ je náhradou za „požiadavky“. Rovnaké API, plus podpora HTTP/2 a natívna asynchronizácia. BeautifulSoup sa od roku 2015 nezmenil – na výbere analyzátora záleží (lxml je 5x rýchlejší ako predvolený).
Kľúčové možnosti:
- `headers={"User-Agent": ...}` — vždy nastavte skutočnú UA (kontaktná adresa je zdvorilá). Predvolené UA „httpx“ je často blokované.
- `timeout=10` — nikdy nerobte neobmedzenú požiadavku; visiace pripojenia unikajú deskriptory súborov.
- `raise_for_status()` — zvyšuje na 4xx/5xx, takže zlyhania sú hlasné, nie tiché.
- `"lxml"` syntaktický analyzátor — 5x rýchlejší ako predvolený
html.parsera zhovievavejší pri chybnom formáte HTML. - `soup.select("css-selector")` – berte zoškrabovanie ako "predstierajte, že používate
document.querySelectorAllv JavaScripte". Selektory CSS sú zvyčajne to, čo chcete, nie API na chodenie po stromoch.
Krok 2: Autor hry (keď JS vykresľuje obsah)
Mnohé moderné SPA (React, Vue, Angular) posielajú prázdny <div id="root"> a hydratujú všetko na strane klienta. httpx.get vám poskytne prázdny shell – požadované údaje sa načítajú pomocou fetch po načítaní stránky.
Test: httpx.get(url).text – vyhľadajte požadované údaje. Ak tam nie je, stránka potrebuje spustenie JS.
Inštalácia: pip install playwright && playwright install chromium (stiahnutie prehliadača má ~150 MB – raz to stojí za to, bolestivé pri každom spustení CI bez ukladania do vyrovnávacej pamäte).
Cena: Playwright je 10-50x pomalší ako httpx (načítanie stránky + vykonávanie JS + réžia prehliadača). Siahnite po ňom len vtedy, keď údaje nie sú v statickom HTML.
Štyri spôsoby, ako vás zablokovať
Väčšina systémov proti poškriabaniu sleduje tieto štyri odtlačky prstov:
1. Chýbajúci/zrejmý User-Agent
2. Žiadne oneskorenie medzi žiadosťami
Neupravené sekvenčné požiadavky zabíjajú server. Pridajte oneskorenie úmerné ich času odozvy – ak zobrazenie stránky trvá 500 ms, medzi žiadosťami počkajte 500 – 2 000 ms. „asyncio.sleep(random.uniform(0.5, 2.0))“.
3. Požadovanie /robots.txt nepovolených ciest
Niektoré stránky používajú súbor robots.txt pre legitímne rýchlostné signály – pred zoškrabaním skontrolujte:
4. Nezhoda TLS / odtlačkov prstov prehliadača
Pokročilá ochrana proti zoškrabaniu (Cloudflare, DataDome) odtlačok vášho TLS handshake a prostredia JS. httpx nevyzerá ako Chrome vo vrstve TLS. Možnosti:
curl_cffi— knižnica založená na zosobnení curl, ktorá napodobňuje skutočné TLS prehliadača.- Playwright – skutočný prehliadač TLS podľa definície.
- Rotácia rezidenčných proxy – jadrová možnosť.
Pre 99 % prípadov použitia (nepriateľské stránky, mierna hlasitosť, nie je potrebné prihlásenie) stačí rešpekt httpx + skutočné UA + oneskorenie + robots.txt. Ak vo veľkom sťahujete stránky chránené Cloudflare, potrebujete skutočné prehliadače alebo platené odblokovacie služby.
Obmedzenie miery (semafor + spánkový vzorec)
Pre hromadné zoškrabovanie skombinujte asyncio.Semaphore (maximálny počet súbežných) s asyncio.sleep (oneskorenie na žiadosť):
Obmedzenie na 5-10 súbežných + 500 ms-2s na oneskorenie požiadavky vás udrží výrazne pod tým, čo spúšťa alarmy limitu frekvencie na väčšine lokalít.
Právne + etické pravidlá
1. Prečítajte si zmluvné podmienky stránky. Mnohé zakazujú zoškrabovanie priamo – stále to môžete urobiť (ToS je zmluvné právo, nie trestné právo vo väčšine jurisdikcií), ale beriete na seba právne riziko. LinkedIn v. hiQ (2022) zistil, že zoškrabovanie verejne viditeľných údajov nie je v USA porušením CAFA, no nosenie mikiny vás nespraví neviditeľným.
2. Nezoškrabujte osobné údaje. GDPR / CCPA / všetko ostatné trestá zhromažďovanie osobných údajov bez súhlasu. Ak vytvárate súbor údajov „zamestnanci v spoločnosti X“, zastavte sa.
Etické dodatky, na ktoré každý zabudne:
- Pošlite skutočnú kontaktnú adresu vo svojom UA. Ak váš robot spôsobuje problémy, vlastník webu by vám mal vedieť poslať e-mail.
- Ak ukladáte údaje stránky do vyrovnávacej pamäte, ukladajte ich do vyrovnávacej pamäte agresívne – nezasahujte ich servery pri každom spustení.
- Uprednostňujte verejné rozhrania API, aj keď sú platené. Lacnejšie ako právne riziko.
Súhrn nástrojov na rok 2026
| Úloha | Siahnite po |
|---|---|
| Statické HTML stránky | httpx + BeautifulSoup(html, "lxml") |
| JS-tavené SPA | „Dramatik“ (bezhlavý Chromium) |
| Cloudflare / anti-bot | curl_cffi alebo dramatik + rezidenčný proxy |
| Veľkoobjemové škrabanie | httpx.AsyncClient + Semafor + spánok |
| Štruktúrované údaje API | httpx.get + .json() — netreba polievku |
Sťahovanie webu v roku 2026 je z 90 % stále „httpx + BeautifulSoup“ a navyše vie, kedy sa má eskalovať do skutočného prehliadača. Osvojte si návyky zdvorilého škrabania (skutočné UA, semafor, spánok, robots.txt) a vybudujete si odolné dátové kanály bez toho, aby ste boli zablokovaní alebo žalovaní.
Ďalší krok: Data Science track má 15 lekcií o scrapingu, ETL a pandách – vytvoríte si skutočný komplexný kanál od načítania HTTP cez DataFrame po export CSV.