Python Web Scraping în 2026: httpx + BeautifulSoup + Dramaturg — Când să folosiți pe care
Cele mai multe tutoriale „Python web scraping” din 2018 încă mai recomandă „cereri + BeautifulSoup”. Partea „cereri” este în regulă, dar acum există valori implicite mai bune, iar jumătate din web-ul modern redă conținut în JavaScript, astfel încât stiva clasică returnează în tăcere pagini goale.
Acest ghid acoperă arborele de decizie din 2026: când httpx + BeautifulSoup are dreptate (încă 90%+ din site-uri), când să apelezi la Dramatur, cum să eviți să fii blocat și cele două reguli care țin scraper-ul atât legal, cât și etic.
Arborele de decizie într-o singură imagine
Asta e. Nouăzeci la sută din sarcinile de scraping sunt HTML static - stiva clasică (redenumită) este instrumentul potrivit. Restul au nevoie de execuție JS, iar dramaturg este răspunsul modern.
Pasul 1: httpx + BeautifulSoup (cazul 90%)
httpx este înlocuitorul drop-in pentru cereri. Același API, plus suport HTTP/2 și asincronizare nativă. BeautifulSoup este neschimbat față de 2015 — alegerea parserului contează (lxml este de 5 ori mai rapid decât valoarea implicită).
Alegeri cheie:
- `headers={"User-Agent": ...}` — setați întotdeauna un UA real (o adresă de contact este politicoasă).
httpxUA implicit este adesea blocat. - `timeout=10` — nu face niciodată o cerere nelimitată; conexiunile suspendate scurg descriptori de fișiere.
- `raise_for_status()` — crește pe 4xx/5xx, astfel încât eșecurile sunt puternice, nu silențioase.
- `"lxml"` parser — de 5 ori mai rapid decât
html.parserimplicit și mai îngăduitor cu HTML malformat. - `soup.select("css-selector")` — tratează scrapingul ca „prefă-te că folosești
document.querySelectorAlldin JavaScript”. Selectoarele CSS sunt de obicei ceea ce doriți, nu API-ul tree-walking.
Pasul 2: Dramaturg (când JS redă conținutul)
Multe SPA-uri moderne (React, Vue, Angular) livrează un <div id="root"> gol și hidratează totul pe partea clientului. httpx.get vă oferă un shell gol — datele pe care le doriți sunt încărcate prin fetch după încărcarea paginii.
Test: httpx.get(url).text — căutați datele dorite. Dacă nu este acolo, site-ul are nevoie de execuție JS.
Instalare: pip install playwright && playwright install chromium (descărcarea browserului este de ~150MB - merită o dată, dureros la fiecare rulare CI fără cache).
Cost: Dramaturgul este de 10-50 de ori mai lent decât httpx (încărcare pagină + execuție JS + overhead browser). Atinge-l numai atunci când datele nu sunt în HTML static.
Cele patru moduri de a fi blocat
Majoritatea sistemelor anti-răzuire urmăresc aceste patru amprente:
1. Lipsă/evident User-Agent
2. Nicio întârziere între cereri
Cererile secvenţiale brute lovesc un server. Adăugați o întârziere proporțională cu timpul de răspuns - dacă o pagină durează 500 ms pentru a fi difuzată, așteptați 500-2000 ms între solicitări. asyncio.sleep(random.uniform(0.5, 2.0)).
3. Solicitarea căilor nepermise /robots.txt
Unele site-uri folosesc robots.txt pentru semnale de rată legitime - verificați înainte de a răzui:
4. TLS / nepotrivire a amprentei browserului
Anti-scraping avansat (Cloudflare, DataDome) amprenta dvs. de strângere de mână TLS și mediu JS. httpx nu seamănă deloc cu Chrome la nivelul TLS. Opțiuni:
curl_cffi— o bibliotecă bazată pe curl-impersonare care imită TLS real al browserului.- Dramaturg - browser real TLS prin definiție.
- Rotați proxy rezidențiali — opțiunea nucleară.
Pentru 99% din cazuri de utilizare (site-uri non-ostile, volum moderat, nu este necesară autentificare), respectul httpx + real UA + delay + robots.txt este suficient. Dacă răzuiți site-uri protejate de Cloudflare la scară largă, aveți nevoie de browsere reale sau de servicii de deblocare plătite.
Evaluați limitarea dvs. (semaforul + modelul de somn)
Pentru răzuirea în bloc, combinați asyncio.Semaphore (maximum simultan) cu asyncio.sleep (întârziere la cerere):
Limitarea la 5-10 întârzieri simultane + 500ms-2s per solicitare vă menține cu mult sub ceea ce declanșează alarme de limită de rată pe majoritatea site-urilor.
Reguli legale + etice
1. Citiți Termenii și condițiile site-ului. Mulți interzic pur și simplu scraping - puteți face acest lucru (ToS este legea contractuală, nu legea penală în majoritatea jurisdicțiilor), dar vă asumați riscuri juridice. LinkedIn v. hiQ (2022) a stabilit că eliminarea datelor vizibile public nu este o încălcare a CFAA în SUA, dar purtarea unui hanorac nu te face invizibil.
2. Nu răzuiți datele personale. GDPR / CCPA / orice altceva penalizează colectarea de informații personale fără consimțământ. Dacă construiți un set de date de „angajați la Compania X”, opriți-vă.
Adăugiri etice pe care toată lumea le uită:
- Trimiteți o adresă de contact reală în UA. Dacă botul dvs. provoacă probleme, proprietarul site-ului ar trebui să vă poată trimite un e-mail.
- Dacă memorați în cache datele site-ului, păstrați cache în mod agresiv - nu loviți serverele lor la fiecare rulare.
- Preferați API-urile publice chiar dacă sunt plătite. Mai ieftin decât riscul legal.
Rezumatul instrumentelor din 2026
| Sarcina | Ajunge la |
|---|---|
| Pagini HTML statice | httpx + BeautifulSoup(html, "lxml") |
| JS-rendered SPA | Dramaturg (Crom fără cap) |
| Cloudflare / anti-bot | curl_cfi sau Dramaturg + proxy rezidențial |
| Razuire de volum mare | httpx.AsyncClient + Semafor + sleep |
| Date API structurate | httpx.get + .json() — nu este nevoie de supă |
Web scraping în 2026 este încă 90% httpx + BeautifulSoup, plus știind când să escaladeze la un browser real. Stăpânește obiceiurile politicoase (UA real, semafor, sleep, robots.txt) și vei construi conducte de date durabile fără a fi blocat sau dat în judecată.
Următorul pas: Pietă Data Science are 15 lecții despre scraping, ETL și panda - veți construi o conductă reală de la capăt la capăt de la preluarea HTTP la DataFrame la exportul CSV.