Recenze Botasaurus: 4MB driver, 122MB instalace a číslo 0,08 ms, které byste neměli citovat

Poslední aktualizace August 14, 2026
Recenze Botasaurus: 4MB driver, 122MB instalace a číslo 0,08 ms, které byste neměli citovat
AI shrnutí

Botasaurus je Python framework pro web scraping od Omkar Cloud, který se prezentuje jako univerzální sada pro tvorbu scraperů. Napíšete obyčejnou funkci, ozdobíte ji @browser, @request nebo @task a framework kolem ní obalí browser driver, HTTP klient podobný prohlížeči, caching, paralelní zpracování i export do více formátů. Jde o meta-balíček, a právě to je podstatné: pip install botasaurus do prostředí nenatáhne jednu knihovnu, ale poskládá menší rodinu vlastních wheelů spolu se širokým stromem závislostí. Tohle mechanické zjištění se nakonec ukázalo jako to nejzajímavější, co jsem mohl poctivě změřit.

Botasaurus je Python framework pro web scraping od Omkar Cloud, který se prezentuje jako univerzální sada pro tvorbu scraperů. Napíšeš obyčejnou funkci, ozdobíš ji @browser, @request nebo @task a framework kolem ní obalí browser driver, HTTP klient podobný prohlížeči, caching, paralelní zpracování i export do více formátů. Jde o meta-balíček, a právě to je důležité: pip install botasaurus do prostředí nenatáhne jednu knihovnu, ale poskládá menší rodinu vlastních wheelů spolu se širokým stromem závislostí. Tohle mechanické zjištění se nakonec ukázalo jako to nejzajímavější, co jsem mohl poctivě změřit.

Botasaurus se marketingově opírá o anti-detection, ale přesně do téhle roviny tato recenze nevstupuje. Inventarizoval jsem framework — co se nainstaluje, co se importuje, jaké metody existují, kolik váží a pod jakou licencí je vydán — místo toho, abych ho poměřoval proti živé obraně. Všechna čísla o velikosti a importe níže pocházejí z pip, z python -c "import ..." a z introspekce tříd, které sice existovaly, ale nikdy nebyly požádány o načtení stránky; žádný prohlížeč jsem kvůli nim nespouštěl. Později jsem prohlížeče spustil, ale jen na stránkách, které jsem si sám napsal a servíroval na 127.0.0.1, abych zjistil, co o sobě driver prozradí a jestli zvládne stáhnout obsah ze stránky, která se vykresluje pomocí JavaScriptu. Žádný živý web v tom nefiguroval, žádná anti-bot služba nebyla kontaktována ani měřena a žádná CAPTCHA se neřešila. Účinnost vůči reálným webům je záměrně mimo rozsah, a raději to říkám hned, než abych naznačoval benchmark, který jsem neprovedl.

Když si tohle vymezíme, hlavní zjištění je příběh o stopě v systému — a je to příběh poměrně neškodný. Čistá instalace vytvoří site-packages o velikosti 122,3 MB napříč 44 balíčky na stroji, kde browser driver uprostřed celého řešení váží zhruba 4 MB. Framework není těžký proto, že by byl těžký driver; je těžký proto, že „all-in-one“ znamená, že s sebou přivádí numpy, lxml, gevent a další desítky komponent k úloze, která má jen stáhnout HTML. A druhá polovina zjištění je číslo, které bývá citováno jako přednost, ale nemělo by se mu věřit: import botasaurus trvá 0,08 ms, což zní jako peříčko lehký framework, ale ve skutečnosti jde jen o prázdné vstupní dveře.

Co Botasaurus vlastně je

Botasaurus — na GitHubu jako omkarcloud/botasaurus, s 5 561 hvězdičkami, 486 forků a 58 otevřenými issue v okamžiku, kdy jsem 14. července 2026 tahal metadata — je Python framework, ne knihovna na jediný úkol. Verze, které jsem testoval, byly botasaurus 4.0.97 pro meta-balíček a botasaurus-driver 4.0.92 pro samotný engine. Meta-balíček deklaruje requires-python >=3.7 (driver >=3.5) a klasifikátory na PyPI uvádějí podporu jen do verze 3.11. Na mém stroji se bez potíží nainstaloval a prošel importním smoke testem na Pythonu 3.14.2. To je důkaz o této instalaci, ne garance kompatibility pro každou funkci.

Zařazení do kategorie je důležité, protože rozhoduje o tom, co znamená „dobrý“. Botasaurus stojí na straně frameworku, ve stejném sousedství jako Scrapy a Crawlee — přijmeš jeho strukturu, dekorátory a konvence a na oplátku za tebe vyřeší infrastrukturu kolem. To je jiná nabídka než u specializovaného driveru typu nodriver, který ti dá připojení přes Chrome DevTools Protocol a ustoupí z cesty. Botasaurus sice driver balí (botasaurus-driver), ale obaluje ho task runnerem, vrstvou cache, serializací výstupů a request klientem. Nekupuješ si jen driver; kupuješ si názor na celý pracovní postup s driverem uvnitř.

Tři dekorátory jsou zhuštěním celého návrhu a všechny tři vstupní body opravdu existují — ověřil jsem, že botasaurus.browser.browser, botasaurus.request.request i botasaurus.task.task jsou přítomné a importovatelné. @browser spustí vaši funkci proti zhumanizovanému browser driveru. @request ji pustí přes lehký HTTP klient, který se tváří jako prohlížeč. @task je obecný obal pro vše, co nepatří jasně do prvních dvou kategorií. Ozdobíš funkci a Botasaurus dodá zbytek: paralelní běh, opakované použití driveru, cache výsledků a zapisovače pro JSON, CSV, Excel i HTML. Je to soudržná myšlenka. Jestli chceš kolem scraperu tolik frameworku, je už spíš otázka vkusu než chyba.

Co z toho plyne a kde je hranice

Botasaurus je schopný, dobře navržený a dělá přesně to, co frameworky dělat mají: zkracuje běžnou cestu. Model s dekorátory je čistý. Licence MIT je skutečně štědrá. Instalace proběhne bez dramatu. Kdybych hodnotil ergonomii API, dostalo by dobrou známku.

Pořád se ale vracím k tomu, že hlavní marketingový tahák frameworku — anti-detection — je přesně to jediné, k čemu se odpovědná recenze nemůže vyjadřovat, aniž by ho postavila proti produkční obraně někoho jiného. Driver skutečně nabízí API pojmenované explicitně anti-detection stylem: metody, jejichž existenci jsem potvrdil, ale jejichž chování jsem proti žádnému cíli netestoval. To je celý rozsah tvrzení, které si o tom dovolím. Nepustil jsem ho na chráněný web, neměřil úspěšnost, nerozebíral mechanismus a ani z formulací nebudu nic z toho naznačovat. Metody v třídě jsou. Co dělají v reálném provozu, je jiné téma a tahle recenze ho neřeší.

Co následuje, je inventura schopností, instalace, zdrojů a licence, plus to, co driver dělá na stránce, kterou mám pod kontrolou — užší tvrzení, než jaké dělá většina recenzí tohoto nástroje, a právě v tom užším vymezení je smysl.

Co o sobě prozrazuje

Measured results chart: Default browser disclosures by stack

Tady je otázka, na kterou můžeš odpovědět, aniž by ses přibližoval k reálné obraně: když Botasaurus řídí prohlížeč, co o sobě ten prohlížeč stránce, kterou sleduje, sám prozradí? Napsal jsem stránku, která čte ty nejzjevnější věci — navigator.webdriver, user-agent, platformu, jazyky, počet pluginů a hardwarových jader, podobu window.chrome, co říká Permissions API, geometrii okna a obrazovky — naservíroval ji na 127.0.0.1 a poslal na ni čtyři stacky: Botasaurus, nodriver a jako kontrolu čistý Playwright a čistý Puppeteer. Všechny čtyři ovládaly stejnou verzi Chrome (Chrome for Testing 151.0.7922.10), takže jakýkoli rozdíl je rozdíl knihovny, ne samotného prohlížeče. Headless i headed režim, tři běhy každý. Všechny hodnoty níže byly ve všech třech bězích stejné.

StackRežimnavigator.webdriverToken v user-agentunavigator.languages
Botasaurus 4.0.92headlessfalseHeadlessChrome/151.0.0.0["en-US"]
Botasaurus 4.0.92headedfalseChrome/151.0.0.0["en-US"]
nodriver 0.50.3headless / headedfalseHeadlessChrome/151 / Chrome/151["en-US"]
Playwright 1.56.0headless / headedtrueHeadlessChrome/151 / Chrome/151["en-US","en"]
Puppeteer 24.16.0headless / headedtrueHeadlessChrome/151 / Chrome/151["en-US"]

Rozdíly závisí na tom, který control používáš. Proti čistému Puppeteeru změnil Botasaurus navigator.webdriver; seznam jazyků i geometrie s nulovou velikostí okna odpovídaly, user-agent se lišil jen formátem verze. Proti čistému Playwrightu se lišil navíc i seznam jazyků a geometrie okna. Proti nodriveru seděla boolean hodnota i jazyky, a v zobrazených polích se lišil jen formát user-agentu. To jsou zjištění o výchozím prozrazení, ne anti-detection skóre.

Dva detaily jsou zajímavější než prosté false. První je jak se k té hodnotě dojde. Ve všech čtyřech stackech zůstává vlastnost stále nativním getterem prohlížeče na Navigator.prototypefunction get webdriver() { [native code] } — nikdy ne jako vlastní property vložená na instanci a nikdy ne jako nahrazená funkce. Botasaurus tedy nevyrábí hodnotu až po načtení stránky; rozhoduje se při startu prohlížeče a samotná vlastnost zůstává nedotčená.

Druhý detail je ten, který marketing trochu přibrzďuje. V headless režimu Botasaurus stále v user-agentu hlásí HeadlessChrome/151.0.0.0 — úplně stejně jako čistý Puppeteer a čistý Playwright. V headed režimu se přepne na Chrome/151.0.0.0, opět shodně. Konstruktor Driver přitom parametr user_agent má, takže nastavení je na úrovni keyword argumentu, ale výchozí konfigurace nic nemaskuje z nejslavnější self-identifikace v browser automation.

Téměř všechno ostatní bylo mezi všemi čtyřmi stacky stejné, a je dobré to říct naplno, protože to zpřesňuje příběh — každá z položek níže vyšla u Botasaurus, nodriveru, Playwrightu i Puppeteeru stejně:

VlastnostHodnota shodná na všech čtyřech stackech
platformMacIntel
vendorGoogle Inc.
Pluginypět
MIME typydva
pdfViewerEnabledtrue
Logická jádradvanáct
Reportovaná paměť zařízení16 GB
Dotykové bodynula
window.chromepřítomné, s app/csi/loadTimes a bez runtime
Řetězec WebGL rendereruna všech čtyřech totožný

Starý známý rozpor mezi Permissions API a Notification.permission se neobjevil nikde — všechny čtyři stacky hlásily default a prompt v souladu. Prošel jsem také document a window a hledal zbytky ve stylu cdc_, které byly u starších WebDriver stacků známé: ve všech čtyřech prázdné.

Ještě jedna věc, kterou je dobré vědět před nasazením: navzdory své velikosti 122 MB Botasaurus žádný browser nebalí ani nestahuje. find_chrome_executable() najde to, co už na tvém stroji je — u mě /Applications/Google Chrome.app, verze 150.0.7871.187 — a právě tu verzi pak prozradí i user-agent. Tvůj fleet tedy hlásí přesně takový Chrome, jaký má v instalaci; na framework dost překvapivě málo opinionated výchozí chování.

Říkejme tomu přesně: je to záznam o tom, co automatizovaný stack prozradí ve chvíli, kdy po něm nikdo nechce, aby se schovával. Hodí se to obráncům i lidem, kteří chtějí vědět, co jejich nástroje vlastně vysílají navenek. Není to měření toho, jestli to nějakému konkrétnímu servisu vadí. To jsem netestoval a žádný řádek výše nemá být čten jako náznak výsledku.

Mírnější pohled na tuto sadu testů

Prozrazení je jedna věc; správné HTML vrátit je věc druhá. Botasaurus jsem pustil proti stejné tříobsahové testovací sadě, kterou používá zbytek tohoto benchmark repa, takže čísla sedí s ostatními nástroji měřenými zde. Stránka obsahuje tři věci: A, statický odkaz, jehož značka je doslova v bytech odpovědi; B, uzel vytvořený inline skriptem během parsování, přičemž značka i URL jsou složené z fragmentů tak, že je odhalí jen spuštění JavaScriptu; a C, uzel vložený 800 ms po události load, složený stejně. Třída C je ta nepříjemná — čtení v okamžiku load ji nevidí.

StackVýchozí čteníS explicitním wait
Botasaurus 4.0.922 ze 3 (A + B, chybí C)3 ze 3
nodriver 0.50.32 ze 33 ze 3
Playwright 1.56.02 ze 33 ze 3
Puppeteer 24.16.02 ze 33 ze 3

Botasaurus dopadá stejně jako ostatní velká jména. driver.get() následovaný hned driver.page_html dává snímek v momentu loadu: JavaScript vykreslí správně — což potvrzuje třída B, protože v naservírovaných bytech vůbec není — ale při zpoždění 800 ms už třídu C mine. Přidáš driver.wait_for_element("#delayed-injected") a máš všechny tři. Stabilní ve třech opakováních a ve třech samostatných bězích celé sady, bez výkyvů.

Zajímavé je, kde defaultní čtení přestává stačit, když měníš zpoždění injekce:

Třída C vložena poBotasaurusnodriverPlaywrightPuppeteer
0 msnalezenonalezenonalezenonalezeno
100 msnalezeno
200 msnalezeno
300 msnalezeno
400 ms a více

Všechny ostatní stacky ztratí třídu C ve chvíli, kdy injekce přistane 100 ms nebo později po loadu. Botasaurus ji ještě zachytí při 300 ms a vzdá to až na 400 ms. To je framework, který se chová jako framework, a důvod je přímo v konstruktoru: wait_for_complete_page_load=True je výchozí, takže get() se vrací smysluplně později než prostý load event. Konkrétně jeho výchozí čtení stojí 401–431 ms wall-clock času, kdežto nodriver 119–129 ms a Puppeteer 125–171 ms.

Na téhle lokální sadě s odloženou injekcí šlo zhruba o 250 ms navíc na navigaci výměnou za pozdější výchozí snapshot. Zachytil to obsah vložený až 300 ms po loadu v těchto bězích; to ale neznamená, že je Botasaurus přesnější na libovolných stránkách. Pokud píšeš rychlé scrapery bez explicitních wait podmínek, tenhle polštář může zabránit přehlédnutí pozdního uzlu. Při vysokém objemu navigací nebo když už čekáš na přesnou podmínku, je to prostě režie navíc.

Ještě dvě časová měření pro měřítko. Nahodit browser bylo u Botasaurus prakticky na úrovni nodriveru a Puppeteeru a výrazně pomalejší než Playwright:

StackStart browseru napříč běhy
Botasaurus 4.0.92986–1151 ms
nodriver 0.50.3910–1583 ms
Puppeteer 24.16.0969–1008 ms
Playwright 1.56.0282–365 ms

A wait_for_element() nestojí nic navíc až do zpoždění 300 ms — get() už mezitím doběhl za injekci — a pak se dostane zhruba na 1,42 s při zpoždění 400–800 ms a na 2,43 s při 1500 ms.

Otázka 122 MB: co vlastně meta-balíček instaluje

Measured results chart: Heaviest installed dependencies

Tady je výpočet, protože je to to nejužitečnější, co ti můžu dát. Čisté pip install botasaurus v čerstvém virtuálním prostředí vytvořilo strom site-packages o velikosti 122,3 MB rozprostřený přes 44 dist-info balíčků. Když odečteš samotný pip (10,9 MB, což je spíš režie venv než něco, co si vyžádal Botasaurus), dostaneš zhruba 111 MB frameworku a závislostí. Browser driver — komponenta, která skutečně provádí automatizaci prohlížeče — z toho tvoří asi 4 MB. Takže asi 107 MB je všechno ostatní, co meta-balíček vyhodnotil jako potřeba.

Kam se to ztratí? Pět nejtěžších transitivních závislostí samo o sobě tvoří většinu velikosti (každý řádek je položka install_footprint.heaviest_deps_mb v artifacts/raw/runs/resource_baseline.run1.json; součet je můj, ne pole v souboru):

BalíčekVelikost na disku
numpy30,9 MB
lxml19,2 MB
botasaurus_requests12,6 MB
gevent11,3 MB
pygments8,4 MB
Pět balíčků dohromady82,4 MB (30,9 + 19,2 + 12,6 + 11,3 + 8,4)

Že největší položka je právě numpy, to mě přimělo zvednout obočí — jde o knihovnu pro lineární algebru uvnitř nástroje, jehož úkolem je stahovat a parsovat webové stránky. Není to vyloženě špatně; frameworky si průběžně přidávají pomocné závislosti a je zjevné, že něco v tom stromu potřebuje práci s poli. Je to jen hodně železa na takovou pochůzku.

Pro srovnání váží cílený driver nodriver na stejném stroji asi 17,2 MB ve 6 balíčcích — tedy zhruba méně. (Tohle číslo není z téhle instalace: je to install_footprint.site_packages_total_mb v artifacts/raw/runs/resource_baseline.run1.json u nodriveru, měřené v odděleném běhu na stejném hostu, a 122,3 ÷ 17,2 = 7,1.) Ani jedno číslo není chyba a nejde o pořadí schopností; je to prostě mechanický rozdíl mezi frameworkem s baterkami v balení a cíleným driverem. V kontejneru přispívá naměřená stopa site-packages do aplikační vrstvy. Není to celková velikost image a tenhle test neměřil ani build, ani cold-deploy čas.

Ještě jedna drobnost k velikosti: při introspekci spustilo první použití from botasaurus.request import request jednorázové stažení zhruba 12,8 MB. Zachycený běh dostatečně neidentifikoval artefakt ani cíl, aby šlo tohle číslo považovat za stabilní přírůstek instalované stopy. Ukazuje ale, že tento kódový path může při prvním použití vyžadovat síť, což stojí za ověření ve vlastním image ještě před air-gapped nasazením.

Import číslo, které lže

Měření cold-start importu je přesně místo, kde se člověk při čtení čísel snadno zmýlí. Měřeno přes sedm čerstvých subprocess importů vyšel import botasaurus na top-level median 0,08 ms. Když to citujete samo o sobě, zní to jako nejlehčí framework ve své třídě.

Jenže není. Je rychlý proto, že tam téměř nic není. Top-level balíček botasaurus neexportuje žádné __version__ a public namespace je téměř prázdný — import toho skoro nic nedělá, protože balíček skoro nic neobsahuje. Číslo, které opravdu rozhoduje u CLI nástroje nebo serverless cold startu, je import enginu: from botasaurus_driver import Driver trvá asi 135 ms, stabilně v rozmezí pár milisekund mezi běhy. To je skutečná fixní cena, kterou zaplatíš před tím, než se stáhne jediná stránka. A jakmile je modul driveru importovaný, resident memory se drží kolem 29–30 MB — opět ještě před tím, než běží jakýkoli proces Chrome. Když spustíš skutečný browser, paměť výrazně naroste; já jsem ale s běžícím browserem paměť neměřil, takže k ní číslo nedám.

Poučení je malé, ale ostré: to, že import botasaurus je okamžitý, je vlastnost prázdného top-level balíčku, ne důkaz, že framework je levný. Při odhadu cold startu měř import, na kterém skutečně závisíš.

Podoba API: 99 metod za téměř prázdnými dveřmi

System diagram: API shape: behind a near-empty front door

Třída Driver v enginu vystavuje 99 veřejných metod — široký povrch pokrývající navigaci, dotazy na elementy, cookies a local storage, myš a klávesnici, screenshoty, správu záložek, CDP passthrough i upload souborů. Konstruktor bere 18 parametrů, což je slušná mapa nastavitelného prostoru: headless, proxy, profile, tiny_profile, block_images, block_images_and_css, wait_for_complete_page_load, chrome_executable_path, extensions, arguments, user_agent, window_size, lang a další. Jako API při konstrukci pokrývá obvyklé ovládací prvky browser wrapperu.

Háček v podobě API je nahoře a je neškodný, ale skutečný. import botasaurus ti dá téměř prázdný namespace — bez __version__, prakticky bez top-level public names. Všechno, co skutečně používáš, žije v podmodulech: from botasaurus.browser import browser, Driver, from botasaurus.request import request, from botasaurus.task import task. Když budeš hledat botasaurus.__version__, abys zalogoval, jakou verzi spouštíš, nenajdeš ji; musíš sáhnout po importlib.metadata. Nic z toho nic nerozbije. Jen to není rozložení, které Python vývojář čeká automaticky, a vědět to ušetří zmatených pět minut první den.

Jeden poznatek k dokumentaci o metodách, na které jsem upozornil výše, je fér a zůstává v mém vymezení: z metod pojmenovaných anti-detection stylem má jen 2 nějaký in-code docstring. Zbytek je srozumitelný jen podle názvu, přičemž podrobná dokumentace žije na externím webu, ne ve zdrojáku nainstalovaném v balíčku. To je poznámka k umístění dokumentace, ne soud o kvalitě — spousta dobrých knihoven nechává text mimo kód — ale pokud je tvůj pracovní postup „čtu source, abych pochopil metodu“, většina téhle části ti řekne jen jméno a nic víc.

Licence: MIT až do hloubi driveru

Meta-balíček i botasaurus-driver deklarují MIT, včetně standardního klasifikátoru License :: OSI Approved :: MIT License. MIT je permissive: žádná copyleft povinnost, žádný požadavek na otevření vlastního kódu, minimální tření pro komerční použití. To je skutečný a nepřehlédnutelný kontrast vůči nodriveru, příbuznému anti-detect driveru, který je vydán pod AGPL-3.0 — copyleft licencí, jejíž network-use klauzule umí právní oddělení pořádně znervóznět. Pokud je pro tebe licence rozhodující, je postoj Botasaurusu pod MIT skutečný plus.

Háček je opět ve formě meta-balíčku. Tahle permissive MIT se vztahuje na vlastní first-party wheels Botasaurusu. Neznamená automaticky, že má v kapse i zhruba 40 transitivních balíčků, které instalace přitahuje, protože každý z nich má vlastní licenci. Potvrdil jsem MIT na vrcholových balíčcích vydávaných Omkar Cloud; neauditoval jsem licence všech závislostí ve stromu. Pro hobby projekt ten rozdíl obvykle nevadí. Pro nasazení celého stromu ve firmě, která řeší software bill of materials, je ale strom o 40 balíčcích něco, co by mělo projít tvým vlastním licenčním skenerem ještě před závazným rozhodnutím — ne proto, že jsem našel problém, ale protože jsem se nedíval a meta-balíček je přesně místo, kde se neočekávaná licence schová.

Klady a zápory

Klady:

  • Čistý návrh se třemi dekorátory (@browser / @request / @task), všechny tři vstupní body existují — framework zkracuje běžný případ.
  • Licence MIT na meta-balíčku i driveru, skutečný kontrast vůči AGPL-3.0 u srovnatelného driveru. Permissive, vhodné pro komerční použití, bez copyleftu.
  • Široké API driveru: 99 veřejných metod a 18parametrový konstruktor pokrývající běžné potřeby browser automatizace.
  • Prošel instalací i import smoke testy na Pythonu 3.14.2 a 3.12.13, tedy nad rámec deklarovaných classifierů (které končí na 3.11); běhová kompatibilita ale nebyla prokázána.
  • Největší defaultní okno správnosti z nástrojů, které jsem měřil: stále zachytí obsah vložený 300 ms po loadu, zatímco nodriver, Playwright a Puppeteer o něj přijdou už po 100 ms. wait_for_complete_page_load=True dělá skutečnou práci.
  • navigator.webdriver je ve výchozím nastavení false, zatímco oba stock ovladače vrací true, a to bez patchování vlastnosti — descriptor zůstává nativním getterem prohlížeče.
  • Baterky v balení záměrně: caching, paralelismus, reuse driveru i výstupy do JSON/CSV/Excel/HTML jsou součástí frameworku, ne dodatečná vrstva.

Zápory:

  • Těžký na disku: 122,3 MB ve 44 balíčcích, zhruba 7× víc než focused driver, a to kvůli závislostem jako numpy (30,9 MB) a lxml (19,2 MB), ne kvůli samotnému ~4MB driveru.
  • Uklidňující top-level import za 0,08 ms je zavádějící; engine import, na kterém opravdu závisíš, je kolem 135 ms a paměť po importu je asi 29–30 MB ještě před spuštěním browseru.
  • Širší defaultní read window není zadarmo: 401–431 ms na jednu navigaci a čtení oproti 119–129 ms u lehkého driveru na té samé stránce a stejném Chromu.
  • Headless běhy stále ve výchozím user-agentu hlásí HeadlessChrome, stejně jako stock kontrolní nástroje; parametr user_agent v konstruktoru existuje, ale nic ho za tebe nenastaví.
  • Na 122 MB stále nebalí žádný browser — řídí ten Chrome, který už hostitel má, takže verze prozrazovaného prohlížeče závisí na tom, co máš na stroji nainstalované.
  • První použití @request v tomhle běhu spustilo jednorázové stažení asi 12,8 MB; artefakt ani cíl ale nebyly zachyceny dostatečně přesně, aby šlo o stabilní přírůstek stopy.
  • Top-level balíček je téměř prázdný a neobsahuje __version__; skutečné API i verze žijí někde méně nápadně.
  • Většina metod pojmenovaných ve stylu anti-detection nemá in-code docstring, takže ze source poznáš názvy, ne chování.

Mimo to, co pokrývají tato čísla, a tedy zde netestováno: vše kolem skutečné anti-bot účinnosti v reálném provozu (záměrně mimo rozsah), paměť na úrovni jednotlivých stránek, práce s proxy a profily, průchodnost ve velkém měřítku a cokoli jiného než macOS arm64. Čísla o velikosti a importu vznikla bez spuštění prohlížeče; údaje o čtení stránky a prozrazení pocházejí z browserů, které komunikovaly jen s fixture na 127.0.0.1.

Pro koho je a kdo by se mu měl vyhnout

Botasaurus dává smysl, pokud chceš framework, ne jednotlivou součást. Když začínáš scraping projekt od prázdného souboru a raději převezmeš strukturu, než abys ji skládal sám — dekorátory pro vstupní body, řešené caching a paralelismus, vestavěné výstupy — jde o soudržnou možnost s licencí MIT. MIT je permissive, ale tvůj způsob použití a distribuce si přesto zaslouží standardní compliance review. Týmy, které už přemýšlejí ve stylu Scrapy nebo Crawlee, budou mít tenhle rámec povědomý.

Vynech ho, nebo si to minimálně dvakrát rozmysli, pokud je tvůj cílový deployment citlivý na velikost. Instalace o 122 MB s numpy a gevent ve stromu je dost na to, abys si do slim kontejneru tahal víc, než když skutečně potřebuješ jen „řídit browser a vytáhnout pár polí“. Cílený driver ti dá automatizaci za zlomek hmotnosti, ale za cenu toho, že si okolní infrastrukturu dopíšeš sám. A vynech ho úplně, pokud chceš rozhodnutí o anti-detection účinnosti, protože právě tohle jsem záměrně netestoval — věřil bys marketingové proklamaci, kterou jsem ani nepotvrdil, ani nevyvrátil.

Alternativy a kde do toho zapadá Thunderbit

Nejdřív poctivý rámec: Botasaurus je zdarma, pod MIT a self-hosted. Provozuješ fleet, spravuješ aktualizace a vlastníš celý strom závislostí — všech 44 balíčků — včetně patchování, licence compliance a toho, co bude v budoucnu dělat numpy. Pro spoustu týmů je právě tahle odpovědnost přesně to, co chtějí, a žádná managed služba nepřekoná „framework, který už máš“ v čisté ceně.

V open source je nejrozumnější porovnávat podle tvaru. Pokud jsi s Botasaurusem na straně frameworku, Scrapy a Crawlee jsou zřejmí soupeři, které je dobré zvážit — zralé, názorově pevné a každé s vlastními zvyklostmi. Když chceš z stránky LLM-ready Markdown místo frameworku pro stavbu crawleru, Crawl4AI a obsahově zaměřená Trafilatura míří přímo na tenhle úkol. Jestli se ti líbí Python a anti-detect přístup, ale chceš něco lehčího než meta-balíček, Scrapling stojí za pozornost, a pokud přichází v úvahu kompilovaný jazyk, Go knihovna Colly obětuje renderování JavaScriptu výměnou za rychlost a malou stopu. Jakákoli možnost řízená browserem, včetně Botasaurusu, zdědí nákladový profil, který popisuje naše srovnání Playwrightu a Puppeteeru — skutečné prohlížeče nejsou levné na provoz, a proto framework kolem nich váží tolik, kolik váží.

Managed API vstupuje do stejného pipeline, ale v jiném bodě. Botasaurus je self-hosted vývojářský stack; Thunderbit prodává managed variantu, mířenou na stejné vývojáře. Open API má dva endpointy. POST /distill (1 credit) vrátí stránku jako čistý Markdown připravený pro LLM, přičemž renderování i anti-bot jsou vyřešeny serverově, takže browser ani strom závislostí vůbec neprovozuješ. POST /extract (20 credits) vrátí strukturované JSON podle JSON Schema, kterou si definuješ, a renderMode nastavíš na none, basic nebo full podle toho, kolik browseru stránka doopravdy potřebuje. Oba endpointy mají batch verze až pro sto URL najednou. K dispozici je MCP server pro agenty a coding asistenty — thunderbit_suggest_fields je zdarma a ukáže, co stránka nabízí, ještě než utratíš cokoli — a CLI přes npx @thunderbit/thunderbit-cli pro cron a CI. Pro neprogramátory, kteří se toho nechtějí dotýkat vůbec, je tu Chrome extension, která používá stejný engine jako no-code nástroj, a návody na Thunderbit YouTube kanálu pokrývají běžné workflow.

Rozdíl je v tom, kde leží práce, ne v tom, který nástroj je „lepší“. Botasaurus nechává framework, browser fleet, závislosti, infrastrukturu i údržbu na tvé straně bez vendor fee za jeden request; compute, bandwidth, proxy i provoz ale pořád něco stojí. Managed API ti vezme renderování a schema-shaped výstup z ramen a účtuje za jednotlivé volání — můžeš to porovnat se self-hosted sestavou na cenové stránce.

Vyzkoušet Thunderbit pro extrakci webových dat

Verdikt

Botasaurus je rozumný kandidát, pokud chceš all-in-one Python framework a smíříš se s jeho stopou závislostí. Návrh se třemi dekorátory je čistý, API driveru široké a instalace i import smoke testy prošly na novějších verzích Pythonu, než jaké uvádějí classifiery. Na mém lokálním fixture navíc výchozí snapshot zachytil obsah vložený 300 ms po loadu, zatímco ostatní testované stacky ho při 100 ms minuly; to je ale výsledek na fixture, ne obecné pořadí.

Je ale potřeba správně chápat měřítko. Jde o instalaci 122 MB ve 44 balíčcích, kde driver váží asi 4 MB a zbytek tvoří numpy, lxml, gevent a spol. — zhruba 7× víc než focused driver, a ta váha se propíše do velikosti image i do cold-deploy času. Top-level import za 0,08 ms je prázdné vstupní dveře, ne lehký framework; číslo, které tě opravdu stojí peníze, je import enginu kolem 135 ms. Ten shovívavější defaultní read stojí zhruba 250 ms na každé navigaci. A na otázku defaultního prozrazení, kterou jsem skutečně mohl zodpovědět, je obrázek užší, než naznačuje marketing: proti stock Puppeteeru se liší jedna boolean hodnota, headless user-agent stále říká HeadlessChrome a všechny ostatní sledované vlastnosti vyšly na všech čtyřech stackech stejně. Anti-detection slib, na němž nástroj stojí, je jediná věc, kterou tahle recenze nehodnotí — ověřil jsem, že ty metody existují, pustil driver na stránku na svém vlastním stroji a zůstal jsem u toho schválně. Znáš-li stopu, ignoruješ-li lichotivé import číslo a bereš-li stealth marketing jako otevřenou otázku, je Botasaurus férový framework, který dělá přesně to, co framework má dělat. Když očekáváš lehkého drobečka, překvapí tě build time v Dockeru.

Vyzkoušet Thunderbit pro extrakci webových dat Get Started Free

Často kladené otázky

Je Botasaurus zdarma a pod jakou licencí je vydán?
Je zdarma a pod licencí MIT — jak botasaurus meta-balíček, tak engine botasaurus-driver nesou OSI-schválený klasifikátor MIT. MIT je permissive, takže nevyžaduje copyleft a je přívětivá ke komerčnímu použití, což je podstatný rozdíl oproti srovnatelným anti-detect driverům vydaným pod AGPL-3.0. Jedna poznámka: MIT pokrývá vlastní balíčky od Omkar Cloud, ale automaticky ne všechny zhruba 40 transitivních závislostí, které instalace natáhne, takže před firemním nasazením celého stromu si spusť vlastní licenční scan.

Jak velká je instalace Botasaurus a proč import botasaurus vypadá tak rychle?
Čisté pip install botasaurus vytvořilo na mém stroji strom site-packages o velikosti 122,3 MB ve 44 balíčcích. Samotný browser driver má jen asi 4 MB — váhu dělá meta-balíček, který tahá široký strom závislostí, vedený numpy (30,9 MB), lxml (19,2 MB), botasaurus_requests (12,6 MB), gevent (11,3 MB) a pygments (8,4 MB). Je to zhruba 7× větší stopa než u focused driveru typu nodriver na stejném stroji. Nic z toho není chyba; je to cena za „baterky v balení“ a nejvíc se projeví ve velikosti container image. Importní čas tuhle stopu skrývá: import botasaurus vyjde na asi 0,08 ms, ale jen proto, že top-level balíček je téměř prázdný — žádné __version__, skoro žádné public names, takže import skoro nic nedělá. Import, který tě skutečně stojí, je engine from botasaurus_driver import Driver, asi 135 ms, a resident memory po tomhle importu je kolem 29–30 MB ještě před startem browseru. Počítáš serverless cold start? Měř engine import, ne prázdný top-level.

Co Botasaurus o sobě prozrazuje a byl testován proti reálným anti-bot systémům?
První část jsem měřil; druhou jsem záměrně neměřil. Na stránce, kterou jsem servíroval z 127.0.0.1, a při řízení stejné verze Chrome jako u kontrol vychází navigator.webdriver jako false, zatímco stock Playwright i stock Puppeteer hlásí true. Tahle hodnota se nastavuje při startu browseru, ne patchováním vlastnosti — descriptor je stále nativním getterem Chrome. Mimo tuhle boolean hodnotu téměř všechno odpovídalo kontrolám: stejný platform string, pět pluginů, dvanáct jader, 16 GB hlášené paměti zařízení, stejná podoba window.chrome, žádný rozpor v Permissions API a žádné cdc_ zbytky na document nebo window. Headless běhy pořád v user-agentu hlásí HeadlessChrome/151.0.0.0, stejně jako oba kontrolní nástroje — konstruktor Driver sice bere parametr user_agent, ale nic ho za tebe nenastaví. Co se účinnosti týče: nikdy jsem driver neposlal na živý web, nikdy jsem nekontaktoval anti-bot službu a nikdy jsem neřešil CAPTCHA. Driver obsahuje sadu metod pojmenovaných ve stylu anti-detection, jejich existenci jsem potvrdil, ale nic jsem na žádném cíli nevolal, netestoval jejich chování, neměřil úspěšnost ani nepopisoval mechanismus. Tabulka prozrazení výše říká, co stack oznamuje, a nic o tom, kdo poslouchá nebo co s tím dělá.

Zvládá Botasaurus správně obsah renderovaný přes JavaScript?
Ano, a jeho výchozí chování je shovívavější než u většiny nástrojů. Na fixture se třemi třídami obsahu vrátilo driver.get() + driver.page_html při 800ms zpoždění injekce výsledek 2 ze 3 — JavaScript vykreslí správně, ale čte dřív, než přijde velmi pozdní obsah — a driver.wait_for_element() vrátilo 3 ze 3. Rozdíl je v tom, kde defaultní čtení přestává stačit: Botasaurus ještě zachytí obsah vložený 300 ms po loadu, zatímco nodriver, Playwright a Puppeteer o něj přijdou už po 100 ms. Dělá to wait_for_complete_page_load=True v konstruktoru a stojí to asi 250 ms na navigaci.

Jak Botasaurus po instalaci skutečně importuji a používám?
Ne tak, jak bys čekal. Top-level namespace botasaurus je téměř prázdný, takže skutečné API žije v podmodulech: from botasaurus.browser import browser, Driver, from botasaurus.request import request a from botasaurus.task import task. Obyčejnou funkci ozdobíš pomocí @browser, @request nebo @task a framework se postará o okolní driver, caching i výstupy. Protože botasaurus.__version__ neexistuje, použij importlib.metadata, pokud si potřebuješ zalogovat, jakou verzi spouštíš.

Ke
Ke
CTO ve Thunderbit | Senior Data Scientist a expert na ML S téměř desetiletou zkušeností v oblasti strojového učení a datové vědy je Ke Shen absolventem Kolumbijské univerzity a bývalým Senior Data Scientist ve Walmart Labs. Díky hlubokým odborným znalostem v Pythonu, R, Javě a statistice, uznávaným i mezi kolegy, sdílí ověřené poznatky o tom, jak převést složité AI algoritmy od teorie až k produkční architektuře.
Obsah
Thunderbit · AI agent pro webová data

Extrahuj data z jakékoli stránky v 1 kliknutí

Důvěřuje mu více než 250 000 uživatelů
k dispozici bezplatný plán
Z webové stránky do tabulky
Popiš, co potřebuješ — AI agent Thunderbit to vyextrahuje a exportuje do Excelu, Google Sheets, Airtable nebo Notion. Začni zdarma.
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week