BeautifulSoup

Pronalaženje dječjih čvorova s ​​lijepom juhom

Pronalaženje dječjih čvorova s ​​lijepom juhom
Zadatak struganja weba zahtijeva razumijevanje strukture web stranica. Da biste dobili potrebne informacije s web stranica, treba razumjeti strukturu web stranica, analizirati oznake koje sadrže potrebne informacije, a zatim atribute tih oznaka.

Za početnike u struganju weba pomoću BeautifulSoupa, članak koji raspravlja o konceptima struganja po mreži s ovom moćnom knjižnicom možete pronaći ovdje.

Ovaj je članak namijenjen programerima, analitičarima podataka, znanstvenicima ili inženjerima koji već imaju skup vještina za izdvajanje sadržaja s web stranica pomoću BeautifulSoupa. Ako nemate nikakvog znanja o ovoj knjižnici, savjetujem vam da prođete kroz lekcije BeautifulSoup za početnike.

Sada možemo nastaviti - želim vjerovati da ste već instalirali ovu knjižnicu.  Ako ne, to možete učiniti pomoću naredbe u nastavku:

pip instalirati BeautifulSoup4

Budući da radimo na izdvajanju podataka iz HTML-a, trebamo imati osnovnu HTML stranicu na kojoj ćemo vježbati ove koncepte.  Za ovaj bismo članak koristili ovaj HTML isječak za vježbu. Sljedeći ću HTML isječak dodijeliti varijabli koristeći trostruke navodnike u Pythonu.

sample_content = "" "

LinuxHint



Za izradu neuređenog popisa koristi se ul oznaka:
 




Za izradu poredanog popisa koristi se oznaka ol:
 


    Evo uređenog popisa
  1. Broj jedan

  2. Broj dva



Linux Savjet, 2018



"" "

Sad kad smo to sredili, krenimo odmah u rad s knjižnicom BeautifulSoup.

Koristit ćemo nekoliko metoda i atributa koje bismo pozivali na naš objekt BeautifulSoup. Međutim, trebali bismo raščlaniti naš niz pomoću BeautifulSoupa, a zatim dodijeliti varijabli “our_soup”.

iz bs4 uvozi BeautifulSoup kao bso
our_soup = bso (sample_content, "lxml")

Od sada bismo radili s varijablom “our_soup” i pozivali bismo sve svoje atribute ili metode na nju.

Ukratko, ako već ne znate što je podređeni čvor, to je u osnovi čvor (oznaka) koji postoji unutar drugog čvora. Na primjer, u našem HTML isječku, oznake li su podređeni čvorovi oznaka "ul" i "ol".

Evo metoda koje bismo pogledali:

findChild ():

The findChild metoda koristi se za pronalaženje prvog podređenog čvora HTML elemenata. Na primjer, kada pogledamo naše oznake "ol" ili "ul", u njima bismo pronašli dvije oznake za djecu. Međutim kada koristimo findChild metoda, vraća samo prvi čvor kao podređeni čvor.

Ova bi se metoda mogla pokazati vrlo korisnom kada želimo dobiti samo prvi podređeni čvor HTML elementa, jer odmah vraća traženi rezultat.

Vraćeni objekt je tipa bs4.element.Označiti. Tekst iz njega možemo izvući pozivanjem atributa teksta na njemu.

Evo primjera:

first_child = naša_supa.pronađi ("tijelo").pronađi ("ol")
ispis (first_child.findChild ())

Gornji kôd vraća sljedeće:

  • Broj jedan
  • Da bismo dobili tekst iz oznake, nazivamo tekst atribut na njemu.

    Kao:

    ispis (first_child.findChild ().tekst)

    Da biste dobili sljedeći rezultat:

    'Broj jedan'
    findChildren ():

    Pogledali smo findChild metoda i vidio kako to djeluje. The pronađiDjeca metoda djeluje na slične načine, no kako naziv govori, ne nalazi samo jedan podređeni čvor, već dobiva sve podređene čvorove u oznaci.

    Kada trebate dobiti sve podređene čvorove u oznaci, pronađiDjeca metoda je put kojim treba ići. Ova metoda vraća sve podređene čvorove na popisu, a oznaci po vašem izboru možete pristupiti pomoću njenog indeksnog broja.

    Evo primjera:

    first_child = naša_supa.pronađi ("tijelo").pronađi ("ol")
    ispis (first_child.findChildren ())

    To bi vratilo podređene čvorove na popisu:

    [
  • Broj jedan
  • ,
  • Broj dva
  • ]

    Da bi se dobio drugi podređeni čvor na popisu, posao bi obavio sljedeći kod:

    ispis (first_child.findChildren () [1])

    Da biste dobili sljedeći rezultat:

  • Broj dva
  • To je sve što nudi BeautifulSoup što se tiče metoda. Međutim, tu nije kraj. Atributi se također mogu pozivati ​​na našim objektima BeautifulSoup da bi se dijete / djeca / potomak čvor dobio iz HTML elementa.

    sadržaj:

    Dok pronađiDjeca metoda obavila je izravni posao ekstrakcije dječjih čvorova, sadržaj atributi čine nešto malo drugačije.

    The sadržaj atribut vraća popis cjelokupnog sadržaja u HTML elementu, uključujući podređene čvorove. Pa kad nazovete sadržaj atribut na objektu BeautifulSoup, vraćao bi tekst kao nizove, a čvorove u oznakama kao bs4.element.Označiti objekt.

    Evo primjera:

    first_child = naša_supa.pronađi ("tijelo").pronađi ("ol")
    ispis (first_child.sadržaj)

    Ovo vraća sljedeće:

    ["\ n Evo poredanog popisa \ n",
  • Broj jedan
  • ,
    '\ n',
  • Broj dva
  • , '\ n']

    Kao što vidite, popis sadrži tekst koji dolazi prije podređenog čvora, podređenog čvora i teksta koji dolazi nakon podređenog čvora.

    Da bismo pristupili drugom podređenom čvoru, sve što trebamo učiniti je iskoristiti njegov indeksni broj kao što je prikazano dolje:

    ispis (first_child.sadržaj [3])

    To bi vratilo sljedeće:

  • Broj dva
  • djeca:

    Evo jednog atributa koji radi gotovo isto što i atribut sadržaja. Međutim, ima jedna mala razlika koja bi mogla imati velik utjecaj (za one koji optimizaciju koda shvaćaju ozbiljno).

    Atribut children također vraća tekst koji dolazi prije podređenog čvora, samog podređenog čvora i tekst koji dolazi nakon podređenog čvora. Ovdje je razlika u tome što ih vraća kao generator umjesto kao popis.

    Pogledajmo sljedeći primjer:

    first_child = naša_supa.pronađi ("tijelo").pronađi ("ol")
    ispis (first_child.djeca)

    Gornji kod daje sljedeće rezultate (adresa na vašem stroju ne mora se podudarati s onom dolje):

    Kao što vidite, vraća samo adresu generatora. Mogli bismo pretvoriti ovaj generator u popis.

    To možemo vidjeti u primjeru ispod:

    first_child = naša_supa.pronađi ("tijelo").pronađi ("ol")
    ispis (popis (first_child.djeca))

    To daje sljedeći rezultat:

    ["\ n Evo poredanog popisa \ n",
  • Broj jedan
  • ,
    '\ n',
  • Broj dva
  • , '\ n']

    potomci:

    Dok djeco atribut djeluje na tome da unutar oznake dobije samo sadržaj i.e. tekst i čvorovi na prvoj razini, potomci atribut ide dublje i čini više.

    The potomci atribut dobiva sav tekst i čvorove koji postoje u podređenim čvorovima. Dakle, ne vraća samo dječje čvorove, vraća i čvorove unučadi.

    Osim vraćanja teksta i oznaka, također vraća i sadržaj u oznakama kao nizove.

    Baš kao i djeco atribut, potomci vraća svoje rezultate kao generator.

    To možemo vidjeti u nastavku:

    first_child = naša_supa.pronađi ("tijelo").pronađi ("ol")
    ispis (first_child.potomci)

    To daje sljedeći rezultat:

    Kao što smo ranije vidjeli, ovaj objekt generatora možemo pretvoriti u popis:

    first_child = naša_supa.pronađi ("tijelo").pronađi ("ol")
    ispis (popis (first_child.potomci))

    Dobili bismo popis u nastavku:

    ["\ n Evo poredanog popisa \ n",
  • Broj jedan
  • ,
    'Broj jedan', '\ n',
  • Broj dva
  • , 'Broj dva', '\ n']

    Zaključak

    Izvolite, pet različitih načina pristupa dječjim čvorovima u HTML elementima. Moglo bi postojati više načina, međutim s metodama i atributima o kojima se govori u ovom članku treba biti u mogućnosti pristupiti podređenom čvoru bilo kojeg HTML elementa.

    OpenTTD vs Simutrans
    Stvaranje vlastite simulacije prijevoza može biti zabavno, opuštajuće i izuzetno primamljivo. Zbog toga morate isprobati što više igara kako biste pro...
    Vodič za OpenTTD
    OpenTTD je jedna od najpopularnijih igara za poslovnu simulaciju. U ovoj igri morate stvoriti prekrasan prijevoznički posao. Međutim, počet ćete u poč...
    SuperTuxKart za Linux
    SuperTuxKart sjajan je naslov osmišljen kako bi vam besplatno pružio iskustvo Mario Kart na vašem Linux sustavu. Prilično je izazovno i zabavno igrati...