- BeautifulSoup je idealen za razčlenjevanje statičnega HTML-ja v strukturirane podatke, medtem ko Selenium avtomatizira brskalnike za obdelavo spletnih mest, ki uporabljajo veliko JavaScripta ali so zaščitena s prijavo.
- Učinkovito strganje se začne s pregledovanjem URL-jev in strukture DOM v orodjih za razvijalce, da se najdejo stabilni selektorji in razume, kako spletno mesto dostavlja vsebino.
- Združevanje Seleniuma za upodabljanje in BeautifulSoup za razčlenjevanje omogoča robustne cevovode za dinamične strani, overjene tokove in kompleksne uporabniške interakcije.
- Etični in vzdržljivi scraperji spoštujejo pravne meje, omejujejo zahteve, elegantno obravnavajo spremembe spletnega mesta in pogosto omogočajo nabore podatkov za analitiko in fino nastavitev LLM.
Spletno strganje je postalo ena tistih supermoči v zakulisju, ki tiho poganja nadzorne plošče, poročila, modele strojnega učenja in interna orodja, vendar večina ljudi vidi le končne številke. Če delate s podatki, boste na neki točki želeli samodejno pridobivati informacije s spletnih mest, namesto da jih kopirate in prilepite ročno, in prav tukaj blestijo Python, BeautifulSoup in Selenium.
Ko se lotite strganja, hitro naletite na ključno vprašanje: ali naj HTML razčlenjujete neposredno z BeautifulSoup ali zaženete pravi brskalnik s Seleniumom ali celo združite oboje? Statične strani, JavaScript težki vmesniki, prijavni zidovi, omejitve hitrosti in etične omejitve vplivajo na to izbiro. V tem priročniku si bomo ogledali, kako deluje strganje, kje je BeautifulSoup dovolj, kdaj se Selenium splača plačati dodatne stroške in kako jih povezati v robustne delovne procese produkcijske kakovosti.
Razumevanje spletnega strganja in kdaj ga dejansko potrebujete
V svojem bistvu je spletno strganje avtomatizirano zbiranje informacij s spletnih mest, pri čemer se HTML, namenjen ljudem, pretvori v strukturirane podatke, ki jih lahko vaša koda uporabi. To lahko pomeni pridobivanje cen, objav delovnih mest, ocen, raziskovalnih člankov ali celo samo komentarjev za analizo mnenj o določeni temi ali izdelku.
Strganje sega globlje od preprostega strganja zaslona, ker niste omejeni na tisto, kar je vizualno upodobljeno; ciljate na osnovni HTML, atribute in včasih odgovore JSON, ki se nikoli ne pojavijo neposredno na strani. Namesto kopiranja celotnega članka in stotin komentarjev k njemu lahko na primer strgate le besedila komentarjev in časovne žige ter jih vnesete v cevovod za analizo čustev.
Glavni razlog, zakaj je strganje podatkov danes tako priljubljeno, je ta, da so podatki surovina za analitiko, sisteme priporočil, avtomatizacijo podpore strankam in zlasti za fino nastavitev modelov velikih jezikov (LLM). S pravimi prodajnimi cevovodi lahko vedno znova zbirate svežo, za domeno specifično vsebino in ohranjate svoje modele in nadzorne plošče usklajene z realnostjo prek integracija podatkovnega skladišča in podatkovnega jezera namesto da bi se zamrznili ob zadnjem prekinjenem času vadbe.
Seveda ima strganje tudi temnejšo plat, če se izvaja neprevidno ali agresivno, zato morate vedno upoštevati pravne pogoje, tehnične omejitve ter etiko tega, kar zbirate in kako pogosto to počnete. Če ignorirate te omejitve, lahko preobremenite strežnike, prekinete pogodbe ali razkrijete zasebno ali avtorsko zaščiteno gradivo na načine, ki vas zelo hitro spravijo v težave.
BeautifulSoup proti Seleniumu: Dve dopolnjujoči se orodji

Pythonova zbirka orodij za strganje je ogromna, vendar se nenehno pojavljata dve imeni: BeautifulSoup in Selenium, ki rešujeta zelo različne dele problema. BeautifulSoup je knjižnica za razčlenjevanje: vzame HTML ali XML in razkrije prijazen API za sprehod po drevesu DOM, filtriranje elementov in izbiranje pomembnih delov. Ne prenaša strani ali izvaja JavaScripta sama.
Selenium pa avtomatizira pravi brskalnik: prek spletnega gonilnika zažene Chrome, Firefox, Edge ali druge, klikne gumbe, izpolni obrazce, počaka, da se zažene JavaScript, in vam nato izroči v celoti upodobljeno stran. Z vidika Seleniuma si le zelo hiter, zelo potrpežljiv uporabnik, ki nadzoruje brskalnik s kodo.
Praviloma je BeautifulSoup idealen, ko strgate statična spletna mesta ali HTML, pridobljen iz običajne zahteve HTTP, medtem ko je Selenium orodje, na katerega se morate obrniti, ko je spletno mesto zelo dinamično, zgrajeno okoli JavaScripta na strani odjemalca ali zaklenjeno za prijavnimi postopki in kompleksnimi uporabniškimi interakcijami. Številne produkcijske nastavitve dejansko združujejo oboje: Selenium pridobiva in upodablja, BeautifulSoup pa razčlenjuje posnetek HTML.
Upoštevati je treba tudi vidik vzdrževanja in kompleksnosti: Selenium uvaja gonilnike brskalnika, težave z združljivostjo različic in druge gibljive dele, medtem ko je BeautifulSoup lahek in neboleč, vendar omejen na kateri koli HTML, ki ga lahko dobite brez zagona JavaScripta. Izbira napačnega orodja za delo vas ponavadi bodisi nepotrebno upočasni bodisi naredi strgalo neznosno krhko, ko se gradbišče spremeni.
Kako se BeautifulSoup prilega tipičnemu cevovodu za strganje
BeautifulSoup je običajno priključen na preprost cevovod: zgrabi HTML (pogosto z zahteva knjižnico), ga razčlenite v drevo, se pomaknite do ustreznih vozlišč in izvozite rezultate v CSV, JSON ali zbirko podatkov za analiza podatkov s SQL. Ta tok deluje neverjetno dobro za statične strani, kot so spletna mesta z dokumentacijo, preproste oglasne deske za zaposlitev, arhivi novic ali spletna mesta tipa »sandbox«, zasnovana za vajo strganja.
V osnovi BeautifulSoup pretvori neurejen HTML v drevo objektov Pythona, kjer je vsak element – oznake, atributi, besedilna vozlišča – dostopen prek intuitivnih metod, kot so find(), find_all()in filtriranje, podobno CSS-ju. Elemente lahko iščete po imenu oznake, ID-ju, razredu ali celo po ujemanju besedilne vsebine ali funkcij po meri.
Ko najdete pravi del strani, lahko nadaljujete z vrtanjem navzdol tako, da se v DOM-u premikate med starši, otroki in sorojenci ter izvlečete .text vsebino za vidne nize ali vrednosti atributov, kot so href za povezave oz. src za slike. Ta navigacijski model se na koncu zdi zelo podoben načinu, kako pregledujete elemente v orodjih za razvijalce brskalnika.
Za statične oglasne deske za zaposlitev lahko na primer pridobite HTML strani z oglasi, poiščete vsebnik, ki vsebuje vse oglasne deske z zaposlitvijo, po njegovem ID-ju, nato pa uporabite BeautifulSoup za iskanje vsake oglasne deske, izvlečete naziv, podjetje, lokacijo in URL aplikacije, vse to brez potrebe po zagonu celotnega brskalnika. To pomeni manjšo porabo virov, hitrejše izvajanje in enostavnejšo uvedbo na strežnike ali cevovode neomejene inženirske infrastrukture.
Pregled ciljnega mesta pred pisanjem kode
Preden napišete eno samo vrstico Pythona, se v brskalniku vedno začne temeljit potek dela s strganjem z odprtimi orodji za razvijalce in vašo kapo "detektiva HTML". Vaš cilj je razumeti, katere URL-je poklicati, kateri elementi vsebujejo podatke in kako stabilne so te strukture.
Prvi korak je, da spletno mesto uporabljate kot običajen uporabnik: klikate naokoli, uporabljate filtre, odpirate strani s podrobnostmi in opazujete, kaj se dogaja z vrstico URL med navigacijo. Hitro boste opazili vzorce, kot so odseki poti za določene elemente ali parametri poizvedbe, ki predstavljajo iskalne izraze, lokacije ali filtre.
URL-ji sami po sebi kodirajo ogromno informacij, zlasti prek nizov poizvedb, kjer boste videli pare ključ-vrednost, kot so ?q=software+developer&l=Australia ki nadzorujejo, kaj strežnik vrne. Ročno spreminjanje teh parametrov v naslovni vrstici pogosto omogoča ustvarjanje novih rezultatov, ne da bi se sploh dotaknili HTML-ja.
Ko se seznanite z navigacijskim modelom, odprite orodja za razvijalce v brskalniku – običajno prek možnosti Pregled ali bližnjice na tipkovnici – in si oglejte zavihek Elementi ali Pregledovalnik, da raziščete DOM. Če lebdite nad elementi v podoknu HTML, se njihova vizualna predstavitev na strani označi, kar olajša prepoznavanje vsebnikov, naslovov, metapodatkov in gumbov.
Tukaj iščete stabilne kljuke: ID-je, imena razredov ali strukture oznak, ki se predvidljivo ponavljajo v vseh elementih, ki jih želite zbrati, kot na primer div z ID-jem, ki vsebuje vse rezultate, ali article oznaka z določenim razredom, ki ovija vsak izdelek ali kartico z delovnim mestom. Močnejši in bolj opisni kot so ti trnki, bolj odporen bo vaš strgalec, ko se bodo pojavile manjše kozmetične spremembe.
Statična v primerjavi z dinamičnimi spletnimi mesti: zakaj je to pomembno
Z vidika strgala se splet deli na dva velika razreda: statična spletna mesta, ki vam pošiljajo že pripravljen HTML, in dinamične aplikacije, ki vam pošiljajo JavaScript in vaš brskalnik prosijo, naj stran sestavi sproti. To razlikovanje določa, ali so zahteve in BeautifulSoup dovolj ali pa potrebujete popolno plast avtomatizacije brskalnika, kot je Selenium.
Na statičnih straneh HTML, ki ga pridobite z ukazom HTTP GET, že vsebuje naslove, cene, ocene in povezave, ki vas zanimajo, tudi če je označevanje na prvi pogled videti nekoliko kaotično. Ko prenesete telo odgovora, ga lahko BeautifulSoup z veseljem razčleni in filtrira po potrebi – izvajanje JavaScripta ni potrebno.
Dinamična spletna mesta, pogosto zgrajena z ogrodji, kot so React, Vue ali Angular, vračajo vitke ogrodja HTML in debel sveženj JavaScripta, ki se izvaja v brskalniku, sproži klice API-ja in manipulira z DOM-om za vbrizgavanje vsebine. Če uporabljate samo zahteva, boste videli skeletno oznako ali surove končne točke JSON, ne pa prijazno upodobljene kartice delovnega mesta ali mreže izdelkov, ki ste si jo prej ogledali.
Za te strani, ki so polne JavaScripta, potrebujete bodisi orodje, ki lahko izvaja skripte – kot je Selenium ali brskalnik brez glave – bodisi morate izvesti obratni inženiring osnovnih API-jev, ki jih stran kliče, in jih neposredno uporabiti. BeautifulSoup še vedno igra pomembno vlogo pri razčlenjevanju nastalega HTML-ja, vendar ne more sam izvesti koraka upodabljanja.
Obstaja tudi hibridna kategorija, kjer so podatki tehnično statični, vendar skriti za prijavnimi obrazci ali večstopenjskimi poteki, kot so nadzorne plošče ali vsebina naročnine, in v teh primerih je Selenium še posebej uporaben za avtomatizacijo vnašanja poverilnic, pritiskanja gumbov in šele nato posredovanja končnega posnetka HTML BeautifulSoupu.
Praktičen potek dela BeautifulSoup na statični spletni strani
Če si želite ogledati BeautifulSoup v akciji, si predstavljajte, da strgate oglasno desko za zaposlitev ali peskovnik »knjige za strganje«, ki ponuja navaden HTML z doslednim označevanjem za vsak element. Začnete z ustvarjanjem virtualnega okolja, namestitvijo zahteva in lepa juha4in pisanje majhnega skripta, ki pridobi stran kataloga.
Ko prenesete vsebino strani, posredujete telo odgovora BeautifulSoup(html, "html.parser"), ki zgradi drevo razčlenjevanja, ki ga lahko namesto surovih nizov raziskujete po objektih Pythona. Od tam lahko pokličete soup.find() or soup.find_all() osredotočiti se na določene oznake in razrede.
Recimo, da je vsaka knjiga zavita v <article class="product_pod"> oznaka: lahko poiščete vsa taka vozlišča, nato pa za vsak članek poiščete <h3> oznaka z vdelano povezavo za pridobitev naslova in relativnega URL-ja ter <p class="price_color"> oznaka za izvleček cene. Vsebina besedila prihaja iz .text atribut, medtem ko atributi, kot so href or title obnašajo se kot ključi slovarja.
Ko iterirate po teh elementih, zgradite slovarje Pythona, ki zajamejo polja, ki vas zanimajo, in jih dodajo seznamu, ki ga lahko serializirate v JSON za obdelava JSON v SQL, pretvorite v DataFrame ali pošljite neposredno v svojo bazo podatkov. Zahvaljujoč drevesni navigaciji le redko potrebujete krhke regularne izraze, čeprav so regularni izrazi še vedno lahko uporabni pri iskanju besedila znotraj vozlišč.
Takšen pristop se lepo posploši na kateri koli statični seznam: oglase za delo, arhive blogov, nepremičninske oglase ali indekse dokumentacije, pod pogojem, da ima HTML vsaj nekaj dosledne strukture, ki se je lahko oprimete. Ko se spletno mesto spremeni, morate običajno prilagoditi le nekaj selektorjev, namesto da prepišete celoten strgalnik.
Kombinacija Seleniuma in BeautifulSoup za kompleksne poteke
Za dinamične strani ali vsebino, zaščiteno s prijavo, je najboljše iz obeh svetov pogosto kombinacija Seleniuma kot brskalnika in BeautifulSoup kot razčlenjevalnika HTML. Selenium vam zagotovi popolnoma upodobljen DOM in možnost interakcije s stranjo; BeautifulSoup ta DOM spremeni v obvladljivo drevo, po katerem je mogoče izvajati poizvedbe.
Zaporedje na visoki ravni običajno poteka takole: zaženite spletni gonilnik (na primer Chrome), pojdite na ciljni URL, izrecno počakajte, da se kritični elementi naložijo, in nato zgrabite page_source, ki ga vnesete v BeautifulSoup. Od te točke naprej je vaša koda zelo podobna kateri koli skripti za razčlenjevanje statičnega spletnega mesta.
Seleniumov WebDriver API vam omogoča iskanje polj in gumbov prek izbirnikov CSS, atributov XPath, id ali name, nato pa pošiljanje pritiskov tipk, klikanje, pomikanje ali celo nalaganje datotek, kot da bi miško in tipkovnico upravljali sami. Zaradi tega je idealen za upravljanje prijavnih obrazcev, pasic za piškotke, spustnih filtrov, neskončnega pomikanja ali večstopenjskih čarovnikov.
Lahko na primer odprete stran za prijavo, vnesete poverilnice, oddate obrazec, počakate, da se trenutni URL ujema s ciljno nadzorno ploščo, in šele nato zajamete celoten HTML, ki ga posredujete v BeautifulSoup za podrobno ekstrakcijo. Ko končate s strganjem, pokličite driver.quit() čisti procese brskalnika in sprošča vire.
Orodja, kot so webdriver_manager lahko samodejno prenese pravi gonilnik brskalnika, kar vam prihrani težave z ročnim upravljanjem binarnih datotek, ko se brskalniki razvijajo, in je del dobrega administración de dependencias en Python. Še vedno morate spremljati združljivost različic, vendar je namestitev bistveno manj boleča v primerjavi s samostojnim pripenjanjem gonilnikov.
Strganje dinamične vsebine: primer v slogu YouTuba
Dinamične platforme, kot so sodobna spletna mesta z videoposnetki, so klasičen primer, kjer se Selenium uveljavlja, saj lenobno nalagajo več vsebine le, ko se pomikate po strani ali komunicirate z njo. En sam HTTP GET običajno vrne samo začetno vidno polje in JavaScript lupino.
Predstavljajte si, da želite zbrati metapodatke za zadnjih sto videoposnetkov iz kanala: URL-je, naslove, trajanje, datume nalaganja in število ogledov. Selenium bi usmerili na zavihek z videoposnetki kanala, počakali, da se stran naloži, in nato simulirali večkratni pritisk tipke End, da bi spletno mesto v mrežo dodajalo več elementov.
Po nekaj ciklih pomikanja in kratkih intervalih mirovanja, da JavaScript lahko pridobi in upodobi nove dele, lahko izberete vse video vsebnike – pogosto predstavljene z oznako po meri, kot je ytd-rich-grid-media– in jih iterativno prečesavati, da bi izkopali njihovo ugnezdeno vsebino. V vsakem vsebniku boste našli oznako povezave, ki vsebuje href in naslov, oznake span z oznakami aria za trajanje ter vgrajeni metapodatki span, ki prikazujejo oglede in podatke o nalaganju.
Selen find_element in find_elements Metode v kombinaciji z izbirniki XPath ali CSS olajšajo poglobljen vpogled v vsak vsebnik in izvlečenje teh vrednosti. Ko jih vse zberete v seznam slovarjev, hiter JSON dump zapiše vaš nabor podatkov na disk za kasnejšo analizo.
Na koncu zaprete okno brskalnika z driver.close() or driver.quit(), kar vam pusti ponovljiv skript, ki ga je mogoče načrtovati, spreminjati različice in ga razširiti, ko vaš podatkovni cevovod raste. V mnogih primerih uporabe ti podatki postanejo učni ali evalvacijski nabor za nadaljnje modele, nadzorne plošče ali notranja orodja za iskanje.
Povečanje obsega: spletno strganje za natančno nastavitev LLM
Z vzponom natančno nastavljenih programov LLM se je strganje podatkov iz nišnega trika podatkovnega inženiringa razvilo v ključni način za gradnjo specializiranih učnih korpusov in njihovo ohranjanje svežine. Splošni modeli, usposobljeni na javno dostopnih internetnih posnetkih, pogosto zaostajajo za spremembami v resničnem svetu ali pa jim manjka vaša interna terminologija, slog in poteki dela.
Z iskanjem po ciljnih spletnih mestih – pa naj bo to javna dokumentacija, specializirani forumi, raziskovalne revije ali vaša lastna notranja baza znanja – lahko sestavite nabore podatkov, ki natančno odražajo jezik, ton in formate, ki jih želite, da vaš model obvlada. Za pomočnika v podpori strankam to lahko pomeni zajemanje pogostih vprašanj, člankov centra za pomoč, predlog e-poštnih sporočil in celo anonimiziranih dnevnikov klepetov.
BeautifulSoup igra tukaj glavno vlogo, ko so vaši viri statični HTML ali enostavno dostopni za preprostimi končnimi točkami GET, saj vam omogoča, da odstranite navigacijsko nered, oglase in dekorativne oznake, pri čemer ostane le osnovno besedilo in metapodatki, usklajeni z vašo učno shemo. Označite lahko odseke, razdelite vsebino na primere in izvozite JSON, pripravljen za natančno nastavitev ali RAG cevovode.
Selen postane potreben, ko se nekateri od teh dragocenih virov skrivajo za preverjanjem pristnosti, plačljivimi zidovi ali težkim JavaScriptom, kot so notranje nadzorne plošče ali portali za stranke. V teh primerih avtomatizirate brskalnik za prijavo in navigacijo, nato pa posnamete ključne poglede in jih razčlenite z BeautifulSoup, da dobite čisto besedilo.
Ključno je vedno spoštovanje organizacijskih politik, licenc in omejitev zasebnosti: tudi če vam tehnologija omogoča, da izvlečete skoraj vse, bi moral vaš pravni in etični okvir močno omejiti, kaj dejansko spada v vaše sklope usposabljanj za LLM. To pomeni, da je treba preskočiti občutljive osebne podatke, upoštevati datoteko robots.txt in pogoje storitve ter se v dvomih uskladiti z ekipami za upravljanje podatkov.
Etični in pravni vidiki pri strganju
Samo zato, ker je spletna stran javno vidna, še ne pomeni, da jo lahko prosto kopirate na debelo, avtomatizirate dostop ali preprodajate njeno vsebino brez omejitev. Etično strganje se začne z branjem in spoštovanjem pogojev storitve spletnega mesta, direktiv robots.txt in očitnih poslovnih modelov.
Vsebine, zaščitene pred avtorskimi pravicami, kot so plačljivi članki, naročniške revije in plačljive novice, se pogosto skrivajo za plačljivimi zidovi prav zato, ker niso namenjene množičnemu prenosu in distribuciji s strani botov. Avtomatizacija množičnih prenosov tega gradiva lahko poleg preprostih prepovedi računov sproži tudi pravne ukrepe.
Zasebnost je še ena pomembna skrb: strganje strani, ki razkrivajo osebne podatke, zasebne nadzorne plošče ali podatke, specifične za račun, sproža resne opozorilne znake, razen če imate izrecno dovoljenje in vzpostavljene zaščitne ukrepe za varstvo podatkov. Tudi »neškodljivi« javni profili lahko spadajo pod predpise o zasebnosti, odvisno od jurisdikcije in primera uporabe.
Kar se tiče tehničnega vidika, morate vedno omejiti število zahtev in se izogibati preobremenjevanju spletnega mesta z vzporednimi strgalniki, ki lahko poslabšajo delovanje ali povzročijo izpade. Uvedite vljudne zakasnitve, spoštujte omejitve hitrosti in uporabite predpomnjenje ali inkrementalne posodobitve za zmanjšanje obremenitve, kadar koli je to mogoče.
Nazadnje, če ste v dvomih, se obrnite na lastnika spletnega mesta ali ponudnika vsebine, razložite svoj primer uporabe in preverite, ali ponujajo uradni API ali partnerski program. API je skoraj vedno bolj stabilen, predvidljiv in pravno utemeljen kot strganje podatkov, tudi če to pomeni nekaj časa za integracijo nove končne točke ali sheme preverjanja pristnosti.
Izdelava robustnih strgal, ki preživijo spremembe na lokaciji
Eden največjih praktičnih izzivov pri spletnem strganju je trajnost: spletna mesta se razvijajo, oznake se spreminjajo in nenadoma vaši skrbno nastavljeni selektorji vrnejo prazne sezname ali pa sesujejo vaš skript. Obravnavanje strgalnikov kot katerega koli drugega dela produkcijske programske opreme pomaga zmanjšati bolečino.
Začnite s ciljanjem na semantične označevalce, ki se manj verjetno spreminjajo – opisna imena razredov, ID-ji ali strukturni odnosi – namesto na ultra krhke selektorje, vezane na položaj, ali zgolj kozmetične razrede. Ko ima element smiselno ime, kot je card-content or results-container, je običajno varneje kot zanašanje na naključni samodejno generiran niz razreda.
Nato pecite pri obravnavi napak: vsakič, ko pokličete find() or find_all(), bodite pripravljeni na primer, ko element manjka ali se vrne Nonein se izogibajte slepemu klicanju .text na ničelnih objektih. Beleženje manjkajočih polj in nepričakovanih postavitev močno olajša odpravljanje napak pri prenovi.
Avtomatizirani testi ali načrtovana opravila CI, ki periodično izvajajo vaše strgalnike, so izjemno dragoceni, saj zgodaj zaznajo okvare, namesto da bi pustili, da vaši cevovodi tiho proizvajajo prazne ali poškodovane nabore podatkov. Že preprost dimni test, ki preverja število izvlečenih elementov glede na prag, lahko zazna večje regresije.
Pri tokovih, ki temeljijo na Seleniumu, pričakujte, da bodo prilagoditve uporabniškega vmesnika in manjše preureditve DOM-a pokvarile naivne selektorje XPath, zato naj bodo vaši lokatorji čim bolj preprosti in odporni ter jih centralizirajte na enem mestu v svoji kodni bazi. Ko ekipa za razvoj vmesnika prilagaja označevanje, je bolje, da popravite en modul, namesto da iščete izbirnike, razpršene po več skriptah.
Sčasoma boste morda ugotovili tudi, da so nekatere naloge strganja stabilnejše, če se izvajajo prek uradno dokumentiranih API-jev, tudi če to pomeni popoln preklop od razčlenjevanja HTML za določene končne točke. Združevanje API-jev, kjer so na voljo, z BeautifulSoup in Selenium, kjer je to potrebno, pogosto prinese najbolj vzdržno arhitekturo.
Če združimo vse skupaj, se BeautifulSoup in Selenium dopolnjujeta in ne tekmujeta: BeautifulSoup blesti pri hitrem in zanesljivem razčlenjevanju HTML-ja, ko ga enkrat imate, medtem ko Selenium blesti pri ustvarjanju kompleksnih, JavaScript-om prežetih ali overjenih izkušenj do te mere, da ta HTML že obstaja. Če jih uporabljate premišljeno – s poudarkom na etiki, zmogljivosti in vzdrževanju – vam omogočajo, da hrupni, nenehno spreminjajoči se splet pretvorite v čiste, strukturirane nabore podatkov, pripravljene za analizo, nadzorne plošče ali učenje naslednje generacije prilagojenih jezikovnih modelov.
