BeautifulSoup

Iskanje otroških vozlišč s čudovito juho

Iskanje otroških vozlišč s čudovito juho
Naloga strganja po spletu je tista, ki zahteva razumevanje strukture spletnih strani. Če želite pridobiti potrebne informacije s spletnih strani, morate razumeti strukturo spletnih strani, analizirati oznake, ki vsebujejo potrebne informacije, in nato atribute teh oznak.

Za začetnike v spletnem strganju z BeautifulSoup lahko tukaj najdete članek, ki razpravlja o konceptih spletnega strganja s to močno knjižnico.

Ta članek je namenjen programerjem, analitikom podatkov, znanstvenikom ali inženirjem, ki že imajo nabor spretnosti za pridobivanje vsebine s spletnih strani s pomočjo BeautifulSoup. Če o tej knjižnici nimate nobenega znanja, vam svetujem, da preberete vadnico BeautifulSoup za začetnike.

Zdaj lahko nadaljujemo - verjamem, da imate to knjižnico že nameščeno.  V nasprotnem primeru lahko to storite s spodnjim ukazom:

pip namestite BeautifulSoup4

Ker delamo z pridobivanjem podatkov iz HTML-ja, moramo imeti osnovno stran HTML, na kateri bomo te koncepte lahko vadili.  Za ta članek bi uporabili ta delček HTML za vajo. Naslednji delček HTML bom določil spremenljivki s pomočjo trojnih narekovajev v Pythonu.

sample_content = "" "

LinuxHint



Za neurejen seznam se uporablja oznaka ul:
 




Za izdelavo urejenega seznama se uporablja oznaka ol:
 


    Tu je urejen seznam
  1. Številka ena

  2. Številka dve



Namig za Linux, 2018



"" "

Zdaj, ko smo to uredili, pojdimo naravnost v delo s knjižnico BeautifulSoup.

Uporabili bomo nekaj metod in atributov, ki bi jih poklicali za naš objekt BeautifulSoup. Vendar bi morali svoj niz razčleniti z uporabo BeautifulSoup in ga nato dodeliti spremenljivki “our_soup”.

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

Od zdaj naprej bi delali s spremenljivko “our_soup” in nanjo klicali vse svoje atribute ali metode.

Če na hitro še ne veste, kaj je podrejeno vozlišče, gre v bistvu za vozlišče (oznako), ki obstaja znotraj drugega vozlišča. V našem delčku HTML so na primer oznake li podrejena vozlišča oznak "ul" in "ol".

Tukaj so metode, ki bi jih preučili:

findChild ():

The findChild metoda se uporablja za iskanje prvega podrejenega vozlišča elementov HTML. Na primer, ko si ogledamo oznake "ol" ali "ul", bi v njej našli dve podrejeni oznaki. Ko pa uporabimo findChild vrne samo prvo vozlišče kot podrejeno vozlišče.

Ta metoda se lahko izkaže za zelo koristno, če želimo dobiti le prvo podrejeno vozlišče elementa HTML, saj takoj vrne zahtevani rezultat.

Vrnjeni objekt je tipa bs4.element.Oznaka. Besedilo lahko iz njega izvlečemo tako, da na njem pokličemo besedilni atribut.

Tu je primer:

first_child = our_soup.najdi ("telo").najdi ("ol")
natisni (first_child.findChild ())

Zgornja koda bi vrnila naslednje:

  • Številka ena
  • Če želite dobiti besedilo iz oznake, pokličemo besedilo atribut na njem.

    Všeč mi je:

    natisni (first_child.findChild ().besedilo)

    Če želite dobiti naslednji rezultat:

    'Številka ena'
    findChildren ():

    Ogledali smo si findChild metode in videli, kako deluje. The findChildren metoda deluje na podoben način, vendar, kot pove že ime, ne najde le enega podrejenega vozlišča, v podrejene oznake dobi vsa podrejena vozlišča.

    Ko morate vse podrejene vozlišča spraviti v oznako, se findChildren metoda je prava pot. Ta metoda vrne vsa podrejena vozlišča na seznamu. Do oznake po vaši izbiri lahko dostopate z njeno indeksno številko.

    Tu je primer:

    first_child = our_soup.najdi ("telo").najdi ("ol")
    natisni (first_child.findChildren ())

    To bi vrnilo podrejena vozlišča na seznam:

    [
  • Številka ena
  • ,
  • Številka dve
  • ]

    Če želite dobiti drugo podrejeno vozlišče na seznamu, bi to opravila naslednja koda:

    natisni (first_child.findChildren () [1])

    Če želite dobiti naslednji rezultat:

  • Številka dve
  • To je vse, kar ponuja BeautifulSoup, ko gre za metode. Vendar se to še ne konča. Atribute lahko pokličete tudi na naših objektih BeautifulSoup, da pridobite vozlišče otrok / otrok / potomcev iz elementa HTML.

    vsebina:

    Medtem ko findChildren metoda naredila enostavno delo pri pridobivanju vozlišč otrok, vsebino attributes naredi nekaj nekoliko drugačnega.

    The vsebino atribut vrne seznam vse vsebine v elementu HTML, vključno s podrejenimi vozlišči. Torej, ko pokličete vsebino atribut na objektu BeautifulSoup, bi vrnil besedilo kot nize, vozlišča v oznakah pa kot bs4.element.Oznaka predmet.

    Tu je primer:

    first_child = our_soup.najdi ("telo").najdi ("ol")
    natisni (first_child.vsebina)

    To vrne naslednje:

    ["\ n Tukaj je urejen seznam \ n",
  • Številka ena
  • ,
    '\ n',
  • Številka dve
  • , '\ n']

    Kot lahko vidite, seznam vsebuje besedilo, ki je pred podrejenim vozliščem, podrejeno vozlišče in besedilo, ki prihaja za podrejenim vozliščem.

    Za dostop do drugega podrejenega vozlišča moramo le uporabiti njegovo indeksno številko, kot je prikazano spodaj:

    natisni (first_child.vsebina [3])

    To bi vrnilo naslednje:

  • Številka dve
  • otroci:

    Tu je en atribut, ki počne skoraj enako kot atribut vsebine. Vendar ima ena majhna razlika, ki bi lahko imela velik vpliv (za tiste, ki se optimizacije kode lotijo ​​resno).

    Atribut otroci vrne tudi besedilo, ki je pred podrejenim vozliščem, podrejeno vozlišče samo in besedilo, ki pride za podrejenim vozliščem. Tu je razlika v tem, da jih vrne kot generator namesto kot seznam.

    Oglejmo si naslednji primer:

    first_child = our_soup.najdi ("telo").najdi ("ol")
    natisni (first_child.otroci)

    Zgornja koda daje naslednje rezultate (naslova na vaši napravi ni treba ujemati s spodnjim):

    Kot lahko vidite, vrne samo naslov generatorja. Ta generator bi lahko pretvorili v seznam.

    To lahko vidimo v spodnjem primeru:

    first_child = our_soup.najdi ("telo").najdi ("ol")
    print (seznam (first_child.otroci))

    To daje naslednji rezultat:

    ["\ n Tukaj je urejen seznam \ n",
  • Številka ena
  • ,
    '\ n',
  • Številka dve
  • , '\ n']

    potomci:

    Medtem ko otroci atribut deluje tako, da znotraj oznake dobi samo vsebino i.e. besedilo in vozlišča na prvi ravni, potomci atribut gre globlje in naredi več.

    The potomci atribut dobi vse besedilo in vozlišča, ki obstajajo v podrejenih vozliščih. Torej ne vrne samo vozlišč otrok, ampak tudi vozlišča vnukov.

    Poleg vrnitve besedila in oznak vrne tudi vsebino v oznakah kot nize.

    Tako kot otroci atribut, potomci vrne rezultate kot generator.

    To lahko vidimo spodaj:

    first_child = our_soup.najdi ("telo").najdi ("ol")
    natisni (first_child.potomci)

    To daje naslednji rezultat:

    Kot smo že videli, lahko nato ta objekt generatorja pretvorimo v seznam:

    first_child = our_soup.najdi ("telo").najdi ("ol")
    print (seznam (first_child.potomci))

    Dobili bi spodnji seznam:

    ["\ n Tukaj je urejen seznam \ n",
  • Številka ena
  • ,
    'Številka ena', '\ n',
  • Številka dve
  • , 'Številka dve', '\ n']

    Zaključek

    Tukaj je, pet različnih načinov dostopa do podrejenih vozlišč v elementih HTML. Načinov bi lahko bilo več, vendar bi z metodami in atributi, obravnavanimi v tem članku, morali imeti dostop do podrejenega vozlišča katerega koli elementa HTML.

    Kako spremeniti levi in ​​desni gumb miške na računalniku z operacijskim sistemom Windows 10
    Povsem normalno je, da so vse naprave računalniške miške ergonomsko zasnovane za desničarje. Na voljo pa so miške, ki so posebej zasnovane za levičarj...
    Posnemajte klike miške tako, da v Windows 10 lebdite z miško Clickless Mouse
    Uporaba miške ali tipkovnice v napačni drži čezmerne uporabe lahko povzroči veliko zdravstvenih težav, vključno s sevom, sindromom karpalnega kanala i...
    S temi brezplačnimi orodji dodajte gibe miške v sistem Windows 10
    V zadnjih letih so se računalniki in operacijski sistemi močno razvili. Včasih so morali uporabniki uporabljati ukaze za krmarjenje po upraviteljih da...