Krásná polévka

Hledání dětských uzlů s krásnou polévkou

Hledání dětských uzlů s krásnou polévkou
Úkolem škrábání webu je porozumění struktuře webových stránek. Chcete-li získat potřebné informace z webových stránek, musíte pochopit strukturu webových stránek, analyzovat značky, které obsahují potřebné informace, a poté atributy těchto značek.

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 BeautifulSoup4

Jelikož 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 = "" "

LinuxTip



K vytvoření neuspořádaného seznamu se používá značka ul:
 




K vytvoření objednaného seznamu se používá značka ol:
 


    Zde je objednaný seznam
  1. Číslo jedna

  2. Číslo dvě



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 bso
our_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 ():

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í:

  • Číslo jedna
  • 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:

    [
  • Číslo jedna
  • ,
  • Číslo dvě
  • ]

    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:

  • Číslo dvě
  • 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",
  • Číslo jedna
  • ,
    '\ n',
  • Číslo dvě
  • , '\ 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í:

  • Číslo dvě
  • 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",
  • Číslo jedna
  • ,
    '\ n',
  • Číslo dvě
  • , '\ 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",
  • Číslo jedna
  • ,
    'Number One', '\ n',
  • Číslo dvě
  • , 'Number Two', '\ 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.

    Hry Zdarma a open source herní motory pro vývoj linuxových her
    Zdarma a open source herní motory pro vývoj linuxových her
    Tento článek pokryje seznam bezplatných a otevřených herních enginů, které lze použít pro vývoj 2D a 3D her v systému Linux. Existuje mnoho takových h...
    Hry Výukový program Shadow of the Tomb Raider pro Linux
    Výukový program Shadow of the Tomb Raider pro Linux
    Shadow of the Tomb Raider je dvanáctý přírůstek do série Tomb Raider - série akčních adventur vytvořená Eidosem Montrealem. Tato hra byla docela dobře...
    Hry Jak zvýšit FPS v Linuxu?
    Jak zvýšit FPS v Linuxu?
    FPS znamená Snímků za sekundu. Úkolem FPS je měřit snímkovou frekvenci při přehrávání videa nebo herních výkonech. Jednoduše řečeno, počet nepřerušova...