Pro začátečníky ve škrábání webu s BeautifulSoup, článek pojednávající o konceptech škrábání webu s touto výkonnou knihovnou najdete zde.
Tento článek je určen pro programátory, analytiky dat, vědce nebo inženýry, kteří již mají dovednosti v získávání obsahu z webových stránek pomocí aplikace BeautifulSoup. Pokud nemáte o této knihovně žádné znalosti, doporučuji vám projít si tutoriál BeautifulSoup pro začátečníky.
Nyní můžeme pokračovat - chci věřit, že tuto knihovnu již máte nainstalovanou. Pokud ne, můžete to udělat pomocí níže uvedeného příkazu:
pip nainstalujte BeautifulSoup4Jelikož pracujeme s extrakcí dat z HTML, potřebujeme mít základní stránku HTML, na které si tyto koncepty procvičíme. V tomto článku bychom tento úryvek HTML procvičili. Chystám se přiřadit následující fragment HTML k proměnné pomocí trojitých uvozovek v Pythonu.
sample_content = "" "
K vytvoření neuspořádaného seznamu se používá značka ul:
- První možnost
- Druhá možnost
Zde je neuspořádaný seznam
K vytvoření objednaného seznamu se používá značka ol:
- Číslo jedna
- Číslo dvě
Zde je objednaný seznam
Linux Hint, 2018
„“ „
Nyní, když jsme to roztřídili, pojďme hned k práci s knihovnou BeautifulSoup.
Budeme využívat několik metod a atributů, které bychom volali na náš objekt BeautifulSoup. Potřebovali bychom však analyzovat náš řetězec pomocí BeautifulSoup a poté jej přiřadit k proměnné „our_soup“.
z bs4 importujte BeautifulSoup jako bsoour_soup = bso (sample_content, "lxml")
Od nynějška budeme pracovat s proměnnou „our_soup“ a volat na ni všechny naše atributy nebo metody.
Stručně řečeno, pokud ještě nevíte, co je podřízený uzel, je to v podstatě uzel (značka), který existuje uvnitř jiného uzlu. Například v našem fragmentu kódu HTML jsou značky li podřízené uzly značek „ul“ a „ol“.
Zde jsou metody, na které bychom se podívali:
- findChild
- najít děti
- obsah
- děti
- potomci
findChild ():
The findChild metoda se používá k nalezení prvního podřízeného uzlu prvků HTML. Například když se podíváme na naše značky „ol“ nebo „ul“, našli bychom v nich dvě podřízené značky. Když však použijeme findChild metoda vrátí pouze první uzel jako podřízený uzel.
Tato metoda by se mohla ukázat jako velmi užitečná, když chceme získat pouze první podřízený uzel prvku HTML, protože hned vrátí požadovaný výsledek.
Vrácený objekt je typu bs4.živel.Štítek. Můžeme z něj extrahovat text tak, že na něj zavoláme textový atribut.
Zde je příklad:
first_child = our_soup.najít („tělo“).najít („ol“)print (first_child.findChild ())
Výše uvedený kód vrátí následující:
Chcete-li získat text ze značky, nazýváme text atribut na to.
Jako:
print (first_child.findChild ().text)Chcete-li získat následující výsledek:
'Číslo jedna'findChildren ():
Podívali jsme se na findChild metoda a viděl, jak to funguje. The najít děti metoda funguje podobným způsobem, ale jak název napovídá, nenajde pouze jeden podřízený uzel, získá všechny podřízené uzly ve značce.
Když potřebujete získat všechny podřízené uzly ve značce, najít děti metoda je způsob, jak jít. Tato metoda vrací všechny podřízené uzly v seznamu, ke značce podle vašeho výběru můžete přistupovat pomocí jejího indexového čísla.
Zde je příklad:
first_child = our_soup.najít („tělo“).najít („ol“)print (first_child.findChildren ())
Tím se vrátí podřízené uzly v seznamu:
[Chcete-li získat druhý podřízený uzel v seznamu, práci by provedl následující kód:
print (first_child.findChildren () [1])Chcete-li získat následující výsledek:
To je vše, co BeautifulSoup poskytuje, pokud jde o metody. Tím to však nekončí. Atributy lze také volat na našich objektech BeautifulSoup, abychom získali uzel podřízený / podřízený / potomek z prvku HTML.
obsah:
Zatímco najít děti metoda provedla přímou práci s extrahováním dětských uzlů, obsah atributy dělá něco trochu jiného.
The obsah Atribut vrací seznam veškerého obsahu v prvku HTML, včetně podřízených uzlů. Takže když zavoláte obsah atribut na objekt BeautifulSoup, vrátil by text jako řetězce a uzly ve značkách jako bs4.živel.Štítek objekt.
Zde je příklad:
first_child = our_soup.najít („tělo“).najít („ol“)print (first_child.obsah)
Tím se vrátí následující:
["\ n Zde je seřazený seznam \ n",'\ n',
Jak vidíte, seznam obsahuje text, který je před podřízeným uzlem, podřízený uzel a text, který je za podřízeným uzlem.
Pro přístup k druhému podřízenému uzlu musíme použít jeho indexové číslo, jak je znázorněno níže:
print (first_child.obsah [3])To by vrátilo následující:
děti:
Zde je jeden atribut, který dělá téměř totéž jako atribut obsahu. Má však jeden malý rozdíl, který by mohl mít obrovský dopad (pro ty, kteří berou optimalizaci kódu vážně).
Atribut podřízený také vrací text, který je před podřízeným uzlem, samotný podřízený uzel a text, který je následován za podřízeným uzlem. Rozdíl je v tom, že je vrátí jako generátor místo seznamu.
Podívejme se na následující příklad:
first_child = our_soup.najít („tělo“).najít („ol“)print (first_child.děti)
Výše uvedený kód poskytuje následující výsledky (adresa vašeho počítače se nemusí shodovat s níže uvedenou):
Jak vidíte, vrací pouze adresu generátoru. Tento generátor bychom mohli převést na seznam.
Vidíme to v níže uvedeném příkladu:
first_child = our_soup.najít („tělo“).najít („ol“)print (seznam (first_child.děti))
To dává následující výsledek:
["\ n Zde je seřazený seznam \ n",'\ n',
potomci:
Zatímco děti atribut funguje na získání pouze obsahu uvnitř značky i.E. text a uzly na první úrovni, potomci atribut jde hlouběji a dělá více.
The potomci atribut získá veškerý text a uzly, které existují v podřízených uzlech. Nevrací tedy pouze podřízené uzly, vrací také uzly vnoučat.
Kromě vracení textu a značek také vrací obsah značek jako řetězce.
Stejně jako děti atribut, potomci vrátí své výsledky jako generátor.
Vidíme to níže:
first_child = our_soup.najít („tělo“).najít („ol“)print (first_child.potomci)
To dává následující výsledek:
Jak jsme viděli dříve, můžeme tento objekt generátoru převést na seznam:
first_child = our_soup.najít („tělo“).najít („ol“)print (seznam (first_child.potomci))
Získali bychom níže uvedený seznam:
["\ n Zde je seřazený seznam \ n",'Number One', '\ n',
Závěr
Tady to máte, pět různých způsobů přístupu k dětským uzlům v prvcích HTML. Může existovat více způsobů, avšak s metodami a atributy popsanými v tomto článku by měl být člověk schopen přistupovat k podřízenému uzlu libovolného prvku HTML.