IlusSupp

Laste sõlmede leidmine ilusa supiga

Laste sõlmede leidmine ilusa supiga
Veebi kraapimise ülesandeks on vaja mõista, kuidas veebilehed on üles ehitatud. Veebilehtedelt vajaliku teabe saamiseks tuleb mõista veebilehtede struktuuri, analüüsida vajalikku teavet sisaldavaid silte ja seejärel nende siltide atribuute.

Algajatele veebi kraapimisel BeautifulSoupiga leiate artikli, milles käsitletakse selle võimsa teegiga veebi kraapimise mõisteid.

See artikkel on mõeldud programmeerijatele, andmeanalüütikutele, teadlastele või inseneridele, kellel juba on oskusi veebilehtedelt sisu BeautifulSoupi abil välja tõmmata. Kui teil pole sellest raamatukogust mingeid teadmisi, soovitan teil läbida algajatele mõeldud õpetus BeautifulSoup.

Nüüd saame jätkata - tahan uskuda, et teil on see kogu juba installitud.  Kui ei, siis saate seda teha alloleva käsuga:

pip installige BeautifulSoup4

Kuna töötame andmete HTML-ist väljavõtmisega, peab nende mõistete praktiseerimiseks olema HTML-i põhileht.  Selle artikli jaoks kasutaksime seda HTML-i fragmenti harjutamiseks. Määran järgmise HTML-i fragmenti muutujale, kasutades Pythonis kolmekordset jutumärki.

sample_content = "" "

Linuxi vihje



Järjestamata loendi koostamiseks kasutatakse ul-silti:
 




Tellitud loendi koostamiseks kasutatakse ol-silti:
 


    Siin on järjestatud loend
  1. Number üks

  2. Number kaks



Linuxi vihje, 2018



"" "

Nüüd, kui oleme selle sordinud, läheme kohe tööle BeautifulSoupi teegiga.

Kasutame paari meetodit ja atribuuti, mida kutsume oma objektile BeautifulSoup. Peaksime aga oma stringi sõeluma BeautifulSoupi abil ja määrama seejärel muutujale “meie_supp”.

bs4-st importige BeautifulSoup bso-ks
meie_supp = bso (näidis_sisu, "lxml")

Nüüdsest töötaksime muutujaga "meie_supp" ja kutsuksime sellele kõik oma atribuudid või meetodid.

Lühidalt öeldes, kui te ei tea veel, mis on lapse sõlm, siis on see põhimõtteliselt sõlm (silt), mis eksisteerib teise sõlme sees. Näiteks meie HTML-i jupis on li-märgendid nii „ul” kui „ol” märgendi laste sõlmed.

Siin on meetodid, mida me vaataksime:

findChild ():

The findChild meetodit kasutatakse HTML-elementide esimese alamsõlme leidmiseks. Näiteks kui vaatame oma „ol” või „ul” silte, leiame sellest kaks lapsemärki. Kuid kui me kasutame findChild meetodi, tagastab see esimese sõlme ainult alamsõlmena.

See meetod võib osutuda väga kasulikuks, kui soovime saada ainult HTML-elemendi esimese alamsõlme, kuna see tagastab vajaliku tulemuse kohe.

Tagastatav objekt on seda tüüpi bs4.element.Silt. Teksti saame sellest välja tõmmata, kutsudes sellele teksti atribuudi.

Siin on näide:

esimene_laps = meie_supp.leidma ("keha").leidma ("ol")
print (esimene_laps.findChild ())

Ülaltoodud kood tagastab järgmise:

  • Number üks
  • Sildilt teksti saamiseks kutsume teksti atribuut sellel.

    Nagu:

    print (esimene_laps.findChild ().tekst)

    Järgmise tulemuse saamiseks:

    'Number üks'
    findChildren ():

    Oleme heitnud pilgu findChild meetodit ja näinud, kuidas see töötab. The leidaLapsed meetod toimib sarnaselt, kuid nagu nimigi ütleb, ei leia see ainult ühte lapse sõlme, see saab sildis kõik laste sõlmed.

    Kui teil on vaja kõik lapsed sõlmed sildile saada, leidaLapsed meetod on tee minna. See meetod tagastab loendis kõik lastesõlmed, pääsete valitud märgendile juurde, kasutades selle registrinumbrit.

    Siin on näide:

    esimene_laps = meie_supp.leidma ("keha").leidma ("ol")
    print (esimene_laps.leiaLapsed ()

    See tagastaks laste sõlmed loendis:

    [
  • Number üks
  • ,
  • Number kaks
  • ]

    Loendis teise alamsõlme saamiseks täidab seda tööd järgmine kood:

    print (esimene_laps.findLapsed () [1])

    Järgmise tulemuse saamiseks:

  • Number kaks
  • See on kõik, mida BeautifulSoup pakub meetodite osas. Sellega see siiski ei lõpe. Atribuute saab kutsuda ka meie BeautifulSoupi objektidele, et saada lapse / laste / järeltulijate sõlm HTML-elemendist.

    sisu:

    Samal ajal kui leidaLapsed meetod tegi laste sõlmede väljatõmbamiseks sirgjoonelise töö sisu atribuudid teeb midagi natuke teistmoodi.

    The sisu atribuut tagastab kogu HTML-elemendi sisu loendi, sealhulgas laste sõlmed. Nii et kui helistate sisu atribuudi objektil BeautifulSoup tagastaks teksti stringidena ja siltide sõlmed a-na bs4.element.Silt objekt.

    Siin on näide:

    esimene_laps = meie_supp.leidma ("keha").leidma ("ol")
    print (esimene_laps.sisu)

    See tagastab järgmise:

    ["\ n Siin on järjestatud loend \ n",
  • Number üks
  • ,
    '\ n',
  • Number kaks
  • , '\ n']

    Nagu näete, sisaldab loend teksti, mis tuleb enne lapse sõlme, lapse sõlme ja teksti, mis tuleb pärast lapse sõlme.

    Teise alamsõlme juurde pääsemiseks peame kasutama ainult selle indeksi numbrit, nagu allpool näidatud:

    print (esimene_laps.sisu [3])

    See tagastaks järgmise:

  • Number kaks
  • lapsed:

    Siin on üks atribuut, mis teeb peaaegu sama, mis atribuut content. Kuid sellel on üks väike erinevus, mis võib tohutult mõjutada (neile, kes võtavad koodi optimeerimist tõsiselt).

    Atribuut Lapsed tagastab ka teksti, mis tuleb enne lapse sõlme, lapse sõlme enda ja teksti, mis tuleb pärast lapse sõlme. Erinevus on selles, et see tagastab need loendi asemel generaatorina.

    Vaatame järgmist näidet:

    esimene_laps = meie_supp.leidma ("keha").leidma ("ol")
    print (esimene_laps.lapsed)

    Ülaltoodud kood annab järgmised tulemused (teie masina aadress ei pea vastama allolevale aadressile):

    Nagu näete, tagastab see ainult generaatori aadressi. Me võiksime selle generaatori teisendada loendiks.

    Näeme seda allpool toodud näites:

    esimene_laps = meie_supp.leidma ("keha").leidma ("ol")
    print (loend (esimene_laps.lapsed))

    See annab järgmise tulemuse:

    ["\ n Siin on järjestatud loend \ n",
  • Number üks
  • ,
    '\ n',
  • Number kaks
  • , '\ n']

    järglased:

    Samal ajal kui lapsed atribuut töötab ainult siltide sisusse jõudmisel i.e. teksti ja sõlmed esimesel tasemel järeltulijad atribuut läheb sügavamale ja teeb rohkem.

    The järeltulijad atribuut saab kogu lapse sõlmedes oleva teksti ja sõlmed. Nii et see ei tagasta ainult laste sõlmi, vaid ka lapselaste sõlmi.

    Lisaks teksti ja siltide tagastamisele tagastab see ka siltide sisu stringidena.

    Täpselt nagu lapsed atribuut, järeltulijad tagastab oma tulemused generaatorina.

    Näeme seda allpool:

    esimene_laps = meie_supp.leidma ("keha").leidma ("ol")
    print (esimene_laps.järeltulijad)

    See annab järgmise tulemuse:

    Nagu varem näha, saame selle generaatori objekti seejärel loendiks teisendada:

    esimene_laps = meie_supp.leidma ("keha").leidma ("ol")
    print (loend (esimene_laps.järglased))

    Me saaksime allpool oleva loendi:

    ["\ n Siin on järjestatud loend \ n",
  • Number üks
  • ,
    "Number üks", "\ n",
  • Number kaks
  • , 'Number kaks', '\ n']

    Järeldus

    Seal on teil viis erinevat viisi, kuidas pääseda HTML-elementide laste sõlmedele juurde. Võimalusi võiks olla rohkem, kuid käesolevas artiklis käsitletud meetodite ja atribuutide abil peaks olema võimalik juurde pääseda mis tahes HTML-elemendi alamsõlmele.

    How to Change Mouse and Touchpad Settings Using Xinput in Linux
    Most Linux distributions ship with “libinput” library by default to handle input events on a system. It can process input events on both Wayland and X...
    X-Mouse Button Control abil saate hiire nupud erinevates tarkvarades erinevalt ümber teha
    Võib-olla vajate tööriista, mis võiks muuta teie hiire juhtimissüsteemi iga kasutatava rakendusega. Sel juhul võite proovida rakendust nimega X hiiren...
    Microsoft Sculpt Touch juhtmeta hiirte ülevaade
    Lugesin hiljuti Microsoft Sculpt Touch juhtmevaba hiir ja otsustas selle osta. Pärast mõnda aega kasutamist otsustasin jagada sellega oma kogemusi. Se...