Python Web Scraping u 2026.: httpx + BeautifulSoup + Playwright — kada koristiti koji
Većina vodiča za "Python web scraping" iz 2018. i dalje preporučuje requests + BeautifulSoup. Dio requests je u redu, ali sada postoje bolje zadane postavke, a polovica modernog weba prikazuje sadržaj u JavaScriptu tako da klasični hrp tiho vraća prazne stranice.
Ovaj vodič pokriva stablo odlučivanja za 2026.: kada je httpx + BeautifulSoup ispravan (još uvijek više od 90% web-mjesta), kada posegnuti za Playwright, kako izbjeći blokiranje i dva pravila koja vaš scraper održavaju zakonitim i etičkim.
Stablo odluke u jednoj slici
To je to. Devedeset posto zadataka struganja statički je HTML — klasični stog (preimenovan) pravi je alat. Za ostalo je potrebno JS izvršenje, a Playwright je moderan odgovor.
Korak 1: httpx + BeautifulSoup (90% slučajeva)
httpx je zamjena za requests. Isti API, plus HTTP/2 podrška i nativni async. BeautifulSoup nije promijenjen u odnosu na 2015. — bitan je izbor parsera (lxml je 5x brži od zadanog).
Ključni izbori:
- `headers={"User-Agent": ...}` — uvijek postavite pravi UA (adresa za kontakt je pristojna). Zadani
httpxUA često je blokiran. - `timeout=10` — nikad ne postavljaj neograničeni zahtjev; obješene veze curenje deskriptori datoteka.
- `raise_for_status()` — povišice na 4xx/5xx tako da su neuspjesi glasni, a ne tihi.
- `"lxml"` parser — 5x brži od zadanog
html.parser, i više oprašta s neispravnim HTML-om. - `soup.select("css-selector")` — tretirajte struganje kao "pretvarajte se da koristite JavaScriptov
document.querySelectorAll". CSS selektori obično su ono što želite, a ne API za hodanje po stablu.
Korak 2: Autor (kada JS renderira sadržaj)
Mnogi moderni SPA (React, Vue, Angular) šalju prazan <div id="root"> i hidratiziraju sve na strani klijenta. httpx.get vam daje praznu ljusku — podaci koje želite učitavaju se putem fetch nakon učitavanja stranice.
Test: httpx.get(url).text — tražite podatke koje želite. Ako ga nema, web mjesto treba JS izvršavanje.
Instalirajte: pip install playwright && playwright install chromium (preuzimanje preglednika je ~150 MB — isplati se jednom, bolno pri svakom pokretanju CI bez predmemoriranja).
Trošak: Playwright je 10-50x sporiji od httpx (učitavanje stranice + izvršavanje JS-a + opterećenje preglednika). Posegnite za njim samo kada podaci nisu u statičkom HTML-u.
Četiri načina za blokiranje
Većina sustava protiv struganja prati ova četiri otiska prsta:
1. Nedostaje / očigledan korisnički agent
2. Nema kašnjenja između zahtjeva
Sirovi sekvencijalni zahtjevi opterećuju poslužitelj. Dodajte odgodu proporcionalnu njihovom vremenu odgovora — ako stranici treba 500 ms da se posluži, pričekajte 500-2000 ms između zahtjeva. asyncio.sleep(random.uniform(0.5, 2.0)).
3. Traženje nedopuštenih staza /robots.txt
Neka web-mjesta koriste robots.txt za legitimne signale brzine — provjerite prije struganja:
4. Neusklađenost TLS-a / otiska prsta preglednika
Napredni anti-scraping (Cloudflare, DataDome) otisak vašeg TLS rukovanja i JS okruženje. httpx ne izgleda kao Chrome na TLS sloju. Mogućnosti:
curl_cffi— biblioteka zasnovana na imitaciji curl-a koja oponaša pravi TLS preglednika.- Dramatičar — pravi TLS preglednika po definiciji.
- Rotirajte rezidencijalne proxyje — nuklearna opcija.
Za 99% slučajeva upotrebe (stranice koje nisu neprijateljske, umjereni volumen, nije potrebna prijava), dovoljno je poštovanje httpx + pravi UA + kašnjenje + robots.txt. Ako krupno skenirate web stranice zaštićene Cloudflareom, potrebni su vam pravi preglednici ili plaćene usluge deblokiranja.
Ograničite sami sebe (semafor + uzorak spavanja)
Za skupno struganje, kombinirajte asyncio.Semaphore (maks. istovremeno) s asyncio.sleep (odgoda po zahtjevu):
Ograničenje na 5-10 istodobnih + 500ms-2s po zahtjevu odgode drži vas znatno ispod onoga što pokreće alarme ograničenja brzine na većini web-mjesta.
Pravna + etička pravila
1. Pročitajte Uvjete pružanja usluge web-mjesta. Mnogi izravno zabranjuju struganje — još uvijek to možete učiniti (ToS je ugovorno, a ne kazneno pravo u većini jurisdikcija), ali preuzimate pravni rizik. LinkedIn protiv hiQ-a (2022.) utvrdio je da skrapiranje javno vidljivih podataka nije kršenje CFAA-e u SAD-u, ali nošenje majice s kapuljačom ne čini vas nevidljivima.
2. Nemojte škrapati osobne podatke. GDPR / CCPA / sve ostalo kažnjava prikupljanje osobnih podataka bez pristanka. Ako gradite skup podataka o "zaposlenicima u tvrtki X", prestanite.
Etički dodaci koje svi zaboravljaju:
- Pošaljite stvarnu kontakt adresu u svoj UA. Ako vaš bot uzrokuje probleme, vlasnik stranice trebao bi vam moći poslati e-poštu.
- Ako predmemorirate podatke web-mjesta, predmemorirajte agresivno — nemojte napadati njihove poslužitelje pri svakom pokretanju.
- Preferirajte javne API-je čak i ako su plaćeni. Jeftinije od pravnog rizika.
Sažetak alata za 2026
| Zadatak | Posegnite za |
|---|---|
| Statičke HTML stranice | httpx + BeautifulSoup(html, "lxml") |
| SPA izvedeno JS | Playwright (bezglavi Chromium) |
| Cloudflare / anti-bot | curl_cffi ili Playwright + stambeni proxy |
| Struganje velike količine | httpx.AsyncClient + Semafor + spavanje |
| Strukturirani API podaci | httpx.get + .json() — nije potrebna juha |
Web scraping u 2026. je 90% i dalje httpx + BeautifulSoup, plus znanje kada treba eskalirati na pravi preglednik. Savladajte navike pristojnog struganja (pravi UA, semafor, spavanje, robots.txt) i izgradit ćete trajne podatkovne kanale bez blokiranja ili tužbe.
Sljedeći korak: Data Science staza ima 15 lekcija o struganju, ETL-u i pandama — izgradit ćete pravi cjevovod od kraja do kraja od HTTP dohvaćanja do DataFramea do CSV izvoza.