Python Web Scraping през 2026 г.: httpx + BeautifulSoup + Playwright — кога да използвате кое
Повечето уроци за „Python web scraping“ от 2018 г. все още препоръчват „requests + BeautifulSoup“. Частта „заявки“ е наред, но вече има по-добри настройки по подразбиране и половината съвременна мрежа изобразява съдържание в JavaScript, така че класическият стек тихо връща празни страници.
Това ръководство обхваща дървото на решенията за 2026 г.: кога „httpx + BeautifulSoup“ е правилен (все още 90%+ от сайтовете), кога да посегнете към „Playwright“, как да избегнете блокиране и двете правила, които поддържат вашия скрепер както законен, така и етичен.
Дървото на решенията в едно изображение
Това е. Деветдесет процента от задачите за сканиране са статичен HTML — класическият стек (преименуван) е правилният инструмент. Останалите се нуждаят от JS изпълнение и Playwright е съвременният отговор.
Стъпка 1: httpx + BeautifulSoup (90% случай)
„httpx“ е заместващият елемент за „заявки“. Същият API, плюс поддръжка на HTTP/2 и естествен асинхронен. BeautifulSoup не е променен от 2015 г. — изборът на анализатора има значение (lxml е 5 пъти по-бърз от стандартния).
Ключови избори:
- `headers={"User-Agent": ...}` — винаги задавайте истински UA (адресът за контакт е учтив). UA по подразбиране
httpxчесто е блокиран. - `timeout=10` — никога не правете неограничена заявка; увиснали връзки теч файлови дескриптори.
- `raise_for_status()` — рейзове на 4xx/5xx, така че провалите да са силни, а не тихи.
- `"lxml"` анализатор — 5 пъти по-бърз от стандартния
html.parserи по-прощаващ при неправилно форматиран HTML. - `soup.select("css-selector")` — третирайте изтриването като "преструвайте се, че използвате
document.querySelectorAllна JavaScript". CSS селекторите обикновено са това, което искате, а не API за ходене по дърво.
Стъпка 2: Писател (когато JS изобразява съдържанието)
Много съвременни SPA (React, Vue, Angular) изпращат празен <div id="root"> и хидратират всичко от страна на клиента. httpx.get ви дава празна обвивка — желаните от вас данни се зареждат чрез fetch след зареждане на страницата.
Тест: httpx.get(url).text — потърсете данните, които искате. Ако не е там, сайтът се нуждае от JS изпълнение.
Инсталиране: pip install playwright && playwright install chromium (изтеглянето на браузъра е ~150MB — струва си веднъж, болезнено при всяко CI изпълнение без кеширане).
Цена: Playwright е 10-50 пъти по-бавен от httpx (зареждане на страница + изпълнение на JS + излишни разходи на браузъра). Посягайте към него само когато данните не са в статичния HTML.
Четирите начина да бъдете блокирани
Повечето системи против остъргване следят за тези четири пръстови отпечатъка:
1. Липсващ/очевиден потребителски агент
2. Без забавяне между заявките
Суровите последователни заявки удрят сървъра. Добавете забавяне, пропорционално на тяхното време за реакция - ако една страница отнема 500 ms, за да се обслужи, изчакайте 500-2000 ms между заявките. asyncio.sleep(random.uniform(0.5, 2.0)).
3. Заявка на забранени пътища за /robots.txt
Някои сайтове използват „robots.txt“ за легитимни сигнали за скорост – проверете преди изтриване:
4. Несъответствие на пръстови отпечатъци на TLS / браузър
Разширено анти-скрапинг (Cloudflare, DataDome) пръстови отпечатъци на вашето TLS ръкостискане и JS среда. „httpx“ не прилича на Chrome на TLS слоя. Опции:
curl_cffi— библиотека, базирана на имитация на curl, която имитира истински TLS на браузъра.- Драматург — реален браузър TLS по дефиниция.
- Завъртане на жилищни проксита - ядрената опция.
За 99% от случаите на използване (не-враждебни сайтове, умерен обем, не се изисква влизане), httpx + real UA + забавяне + robots.txt уважение е достатъчно. Ако мащабно сканирате сайтове, защитени с Cloudflare, имате нужда от истински браузъри или платени услуги за деблокиране.
Ограничаване на скоростта (семафор + модел на сън)
За групово изтриване комбинирайте asyncio.Semaphore (максимално едновременно) с asyncio.sleep (закъснение при заявка):
Ограничаването на 5-10 едновременни + 500ms-2s на забавяне на заявка ви държи доста под това, което задейства аларми за ограничение на скоростта на повечето сайтове.
Правни + етични правила
1. Прочетете Условията за ползване на сайта. Много от тях забраняват директно изтриването — все още можете да го направите (ToS е договорно право, а не наказателно право в повечето юрисдикции), но вие поемате правен риск. LinkedIn срещу hiQ (2022) установява, че изтриването на публично видими данни не е нарушение на CFAA в САЩ, но носенето на качулка не ви прави невидими.
2. Не изтривайте лични данни. GDPR / CCPA / всичко останало наказва събирането на лична информация без съгласие. Ако изграждате набор от данни на „служители в компания X“, спрете.
Етични добавки, които всеки забравя:
- Изпратете реален адрес за контакт във вашия UA. Ако вашият бот създава проблеми, собственикът на сайта трябва да може да ви изпрати имейл.
- Ако кеширате данните на сайта, кеширайте агресивно - не удряйте техните сървъри при всяко изпълнение.
- Предпочитайте публичните API, дори ако са платени. По-евтино от правния риск.
Резюмето на инструментите за 2026 г
| Задача | Посегнете |
|---|---|
| Статични HTML страници | httpx + BeautifulSoup(html, "lxml") |
| JS-изобразен SPA | Playwright (безглав Chromium) |
| Cloudflare / анти-бот | curl_cffi или Playwright + жилищен прокси |
| Изстъргване с голям обем | httpx.AsyncClient + Семафор + заспиване |
| Структурирани API данни | httpx.get + .json() — не е необходима супа |
Уеб скрейпингът през 2026 г. е 90% все още „httpx + BeautifulSoup“, плюс знанието кога да ескалира до истински браузър. Овладейте навиците за учтиво изчистване (истинска UA, семафор, заспиване, robots.txt) и ще изградите трайни канали за данни, без да бъдете блокирани или съдени.
Следваща стъпка: Data Science track има 15 урока за скрейпинг, ETL и pandas — ще изградите истински конвейер от край до край от HTTP извличане до DataFrame до експортиране на CSV.