Krásna polievka

Nájdenie detských uzlov s krásnou polievkou

Nájdenie detských uzlov s krásnou polievkou
Úlohou web scrapingu je porozumieť štruktúre webových stránok. Ak chcete získať potrebné informácie z webových stránok, musíte porozumieť štruktúre webových stránok, analyzovať značky, ktoré obsahujú potrebné informácie, a potom atribúty týchto značiek.

Pre začiatočníkov v škrabaní webu s BeautifulSoup, článok diskutujúci o konceptoch škrabania webu v tejto výkonnej knižnici nájdete tu.

Tento článok je určený pre programátorov, analytikov údajov, vedcov alebo inžinierov, ktorí už majú zručnosti v získavaní obsahu z webových stránok pomocou programu BeautifulSoup. Pokiaľ nemáte žiadne vedomosti o tejto knižnici, odporúčam vám prejsť si tutoriál BeautifulSoup pre začiatočníkov.

Teraz môžeme pokračovať - ​​chcem veriť, že túto knižnicu už máte nainštalovanú.  Ak nie, môžete to urobiť pomocou nižšie uvedeného príkazu:

pip nainštalujte BeautifulSoup4

Pretože pracujeme s extrakciou údajov z HTML, musíme mať základnú stránku HTML, aby sme si tieto koncepty mohli precvičiť.  V tomto článku by sme tento útržok HTML použili na precvičenie. Nasledujúci úryvok HTML priradím premennej pomocou trojitých úvodzoviek v Pythone.

sample_content = "" "

LinuxHint



Na vytvorenie neusporiadaného zoznamu sa používa značka ul:
 




Na vytvorenie zoradeného zoznamu sa používa značka ol:
 


    Tu je zoradený zoznam
  1. Číslo jeden

  2. Číslo dva



Hint pre Linux, 2018



„“ „

Teraz, keď sme to zoradili, prejdime priamo k práci s knižnicou BeautifulSoup.

Budeme využívať niekoľko metód a atribútov, ktoré by sme volali na náš objekt BeautifulSoup. Potrebovali by sme však analyzovať náš reťazec pomocou programu BeautifulSoup a potom ho priradiť k premennej „our_soup“.

z bs4 importujte BeautifulSoup ako bso
our_soup = bso (sample_content, "lxml")

Odteraz budeme pracovať s premennou „our_soup“ a volať na ňu všetky naše atribúty alebo metódy.

Stručne povedané, ak ešte neviete, čo je podradený uzol, v zásade ide o uzol (značku), ktorý existuje vo vnútri iného uzla. Napríklad v našom úryvku HTML sú značky li podradené uzly značiek „ul“ a „ol“.

Tu sú metódy, na ktoré by sme sa pozreli:

findChild ():

The findChild metóda sa používa na nájdenie prvého podradeného uzla prvkov HTML. Napríklad keď sa pozrieme na naše značky „ol“ alebo „ul“, našli by sme v nich dve detské značky. Keď však použijeme findChild metóda vráti iba prvý uzol ako podradený uzol.

Táto metóda by sa mohla ukázať ako veľmi užitočná, ak chceme získať iba prvý podradený uzol prvku HTML, pretože okamžite vráti požadovaný výsledok.

Vrátený objekt je typu bs4.element.Označiť. Text z neho môžeme extrahovať volaním textového atribútu.

Tu je príklad:

first_child = our_soup.nájsť („telo“).nájsť („ol“)
tlač (prvé_dieťa.findChild ())

Vyššie uvedený kód vráti nasledujúce:

  • Číslo jeden
  • Ak chcete získať text zo značky, hovoríme text atribút.

    Páči sa mi to:

    tlač (prvé_dieťa.findChild ().text)

    Ak chcete získať nasledujúci výsledok:

    'Číslo jeden'
    findChildren ():

    Pozreli sme sa na findChild metóda a videli, ako to funguje. The nájsť deti metóda funguje podobným spôsobom, ale ako už z názvu vyplýva, nenájde iba jeden podradený uzol, získa všetky podriadené uzly v značke.

    Ak potrebujete získať všetky podradené uzly v značke, znak nájsť deti metóda je správna cesta. Táto metóda vráti všetky podradené uzly v zozname, k značke podľa vášho výberu môžete pristupovať pomocou jej indexového čísla.

    Tu je príklad:

    first_child = our_soup.nájsť („telo“).nájsť („ol“)
    tlač (prvé_dieťa.findChildren ())

    To by vrátilo podradené uzly v zozname:

    [
  • Číslo jeden
  • ,
  • Číslo dva
  • ]

    Ak chcete získať druhý podradený uzol v zozname, prácu by urobil nasledujúci kód:

    tlač (prvé_dieťa.findChildren () [1])

    Ak chcete získať nasledujúci výsledok:

  • Číslo dva
  • To je všetko, čo spoločnosť BeautifulSoup poskytuje, pokiaľ ide o metódy. Tým to však nekončí. Atribúty možno tiež volať na našich objektoch BeautifulSoup, aby sme získali uzol potomka / potomka / potomka z prvku HTML.

    obsah:

    Kým nájsť deti metóda urobila priamu prácu pri extrakcii detských uzlov, obsah atribúty robí niečo trochu iné.

    The obsah Atribút vráti zoznam všetkého obsahu v prvku HTML vrátane podradených uzlov. Takže keď zavoláte na obsah atribút na objekte BeautifulSoup, vrátil by text ako reťazce a uzly v značkách ako a bs4.element.Označiť objekt.

    Tu je príklad:

    first_child = our_soup.nájsť („telo“).nájsť („ol“)
    tlač (prvé_dieťa.obsah)

    Takto sa vráti toto:

    ["\ n Tu je zoradený zoznam \ n",
  • Číslo jeden
  • ,
    „\ n“,
  • Číslo dva
  • , '\ n']

    Ako vidíte, zoznam obsahuje text, ktorý sa nachádza pred podradeným uzlom, podradený uzol a text, ktorý nasleduje za podradeným uzlom.

    Na prístup k druhému podriadenému uzlu stačí, aby sme využili jeho indexové číslo, ako je uvedené nižšie:

    tlač (prvé_dieťa.obsah [3])

    Takto by sa vrátilo toto:

  • Číslo dva
  • deti:

    Tu je jeden atribút, ktorý robí takmer to isté ako atribút obsah. Má však jeden malý rozdiel, ktorý by mohol mať obrovský vplyv (pre tých, ktorí to s optimalizáciou kódu myslia vážne).

    Atribút deti tiež vráti text, ktorý sa nachádza pred podradeným uzlom, samotný podradený uzol a text, ktorý nasleduje za podradeným uzlom. Rozdiel je v tom, že ich namiesto zoznamu vráti ako generátor.

    Pozrime sa na nasledujúci príklad:

    first_child = our_soup.nájsť („telo“).nájsť („ol“)
    tlač (prvé_dieťa.deti)

    Vyššie uvedený kód poskytuje nasledujúce výsledky (adresa vášho zariadenia sa nemusí zhodovať s adresou nižšie):

    Ako vidíte, vráti iba adresu generátora. Tento generátor by sme mohli previesť do zoznamu.

    Vidíme to na príklade nižšie:

    first_child = our_soup.nájsť („telo“).nájsť („ol“)
    tlač (zoznam (prvé_dieťa.deti))

    To dáva nasledujúci výsledok:

    ["\ n Tu je zoradený zoznam \ n",
  • Číslo jeden
  • ,
    „\ n“,
  • Číslo dva
  • , '\ n']

    potomkovia:

    Kým deti atribút funguje tak, že sa do značky dostane iba obsah i.e. text a uzly na prvej úrovni, potomkovia atribút ide hlbšie a robí viac.

    The potomkovia získa všetok text a uzly, ktoré existujú v podradených uzloch. Takže nevracia iba uzly detí, ale vracia aj uzly vnúčat.

    Okrem vrátenia textu a značiek tiež vráti obsah značiek ako reťazce.

    Rovnako ako deti atribút, potomkovia vráti svoje výsledky ako generátor.

    Toto môžeme vidieť nižšie:

    first_child = our_soup.nájsť („telo“).nájsť („ol“)
    tlač (prvé_dieťa.potomkovia)

    To dáva nasledujúci výsledok:

    Ako sme už videli, potom môžeme tento objekt generátora previesť do zoznamu:

    first_child = our_soup.nájsť („telo“).nájsť („ol“)
    tlač (zoznam (prvé_dieťa.potomkovia))

    Dostali by sme zoznam nižšie:

    ["\ n Tu je zoradený zoznam \ n",
  • Číslo jeden
  • ,
    'Number One', '\ n',
  • Číslo dva
  • , 'Number Two', '\ n']

    Záver

    Máte to, päť rôznych spôsobov prístupu k podradeným uzlom v prvkoch HTML. Môže existovať viac spôsobov, avšak s metódami a atribútmi popísanými v tomto článku by mal mať človek prístup k podradenému uzlu ľubovoľného prvku HTML.

    Hry Ako nainštalovať League Of Legends na Ubuntu 14.04
    Ako nainštalovať League Of Legends na Ubuntu 14.04
    Ak ste fanúšikom League of Legends, potom je to pre vás príležitosť otestovať spustenie League of Legends. Upozorňujeme, že program PlayOnLinux podpor...
    Hry Nainštalujte si najnovšiu strategickú hru OpenRA na Ubuntu Linux
    Nainštalujte si najnovšiu strategickú hru OpenRA na Ubuntu Linux
    OpenRA je herný engine Libre / Free Real Time Strategy, ktorý obnovuje rané hry z Westwoodu, ako napríklad klasické Command & Conquer: Red Alert. Dist...
    Hry Nainštalujte si najnovší Dolphin Emulator pre Gamecube a Wii na Linuxe
    Nainštalujte si najnovší Dolphin Emulator pre Gamecube a Wii na Linuxe
    Emulátor Dolphin vám umožní hrať vybrané hry Gamecube a Wii na osobných počítačoch Linux (PC). Emulátor Dolphin, ktorý je voľne dostupným emulátorom ...