Vakker suppe

Finne barn noder med vakker suppe

Finne barn noder med vakker suppe
Oppgaven med nettskraping er en som krever forståelse av hvordan websider er strukturert. For å få nødvendig informasjon fra nettsider, må man forstå strukturen til nettsider, analysere kodene som inneholder den nødvendige informasjonen og deretter attributtene til disse kodene.

For nybegynnere i nettskraping med BeautifulSoup, finner du en artikkel som diskuterer begrepene nettskraping med dette kraftige biblioteket her.

Denne artikkelen er for programmerere, dataanalytikere, forskere eller ingeniører som allerede har evnen til å trekke ut innhold fra nettsider ved hjelp av BeautifulSoup. Hvis du ikke har noen kunnskap om dette biblioteket, anbefaler jeg deg å gå gjennom BeautifulSoup-veiledningen for nybegynnere.

Nå kan vi fortsette - jeg vil tro at du allerede har dette biblioteket installert.  Hvis ikke, kan du gjøre dette ved å bruke kommandoen nedenfor:

pip installer BeautifulSoup4

Siden vi jobber med å trekke ut data fra HTML, må vi ha en grunnleggende HTML-side for å øve på disse konseptene.  For denne artikkelen vil vi bruke denne HTML-kodebiten til praksis. Jeg skal tilordne følgende HTML-kodebit til en variabel ved hjelp av trippeltitlene i Python.

sample_content = "" "

LinuxHint



For å lage en uordnet liste brukes ul-koden:
 




For å lage en bestilt liste brukes ol-taggen:
 


    Her er en bestilt liste
  1. Nummer en

  2. Nummer to



Linux Hint, 2018



"" "

Nå som vi har sortert det, la oss gå videre til å jobbe med BeautifulSoup-biblioteket.

Vi kommer til å bruke et par metoder og attributter som vi vil kalle vårt BeautifulSoup-objekt. Imidlertid vil vi trenge å analysere strengen ved hjelp av BeautifulSoup og deretter tilordne en "our_soup" -variabel.

fra bs4 importerer BeautifulSoup som bso
our_soup = bso (sample_content, "lxml")

Fra nå av ville vi jobbe med variabelen “our_soup” og kalle alle våre attributter eller metoder på den.

Hvis du ikke allerede vet hva en undernode er, er det i utgangspunktet en node (tag) som finnes i en annen node. I HTML-kodebiten vår er li-kodene for eksempel barnenoder for både "ul" og "ol".

Her er metodene vi tar en titt på:

findChild ():

De findChild metoden brukes til å finne den første undernoden til HTML-elementer. For eksempel når vi tar en titt på “ol” eller “ul” kodene våre, vil vi finne to barnemerker i den. Men når vi bruker findChild metode, returnerer den bare den første noden som undernoden.

Denne metoden kan vise seg å være veldig nyttig når vi bare vil få den første underordnede noden til et HTML-element, da den returnerer det nødvendige resultatet med en gang.

Det returnerte objektet er av typen bs4.element.stikkord. Vi kan trekke ut teksten fra den ved å kalle tekstattributtet på den.

Her er et eksempel:

første barn = vår_suppe.finn ("kropp").finn ("ol")
skriv ut (førstebarn.findChild ())

Koden ovenfor vil returnere følgende:

  • Nummer en
  • For å få teksten fra taggen, kaller vi tekst attributt på den.

    Som:

    skriv ut (førstebarn.findChild ().tekst)

    For å få følgende resultat:

    'Nummer en'
    findChildren ():

    Vi har sett på findChild metode og sett hvordan den fungerer. De findBarn metoden fungerer på lignende måter, men som navnet tilsier, finner den ikke bare en barneknute, den får alle barnets noder i en tag.

    Når du trenger å få alle barna noder i en kode, vil findBarn metoden er veien å gå. Denne metoden returnerer alle barnenodene i en liste, du kan få tilgang til koden du ønsker ved hjelp av indeksnummeret.

    Her er et eksempel:

    første barn = vår_suppe.finn ("kropp").finn ("ol")
    skriv ut (førstebarn.findChildren ()

    Dette vil returnere barnenodene i en liste:

    [
  • Nummer en
  • ,
  • Nummer to
  • ]

    For å få den andre underordnede noden i listen, vil følgende kode gjøre jobben:

    skriv ut (førstebarn.findChildren () [1])

    For å få følgende resultat:

  • Nummer to
  • Det er alt BeautifulSoup gir når det gjelder metoder. Imidlertid slutter det ikke der. Attributter kan også kalles på våre BeautifulSoup-objekter for å få barnet / barn / etterkommere-noden fra et HTML-element.

    innhold:

    Mens findBarn metoden gjorde den enkle jobben med å trekke ut barnenodene, den innholdet attributter gjør noe litt annerledes.

    De innholdet attributt returnerer en liste over alt innholdet i et HTML-element, inkludert barnenoder. Så når du ringer innholdet attributt på et BeautifulSoup-objekt, vil det returnere teksten som strenger og nodene i kodene som en bs4.element.stikkord gjenstand.

    Her er et eksempel:

    første barn = vår_suppe.finn ("kropp").finn ("ol")
    skriv ut (førstebarn.innhold)

    Dette returnerer følgende:

    ["\ n Her er en ordnet liste \ n",
  • Nummer en
  • ,
    '\ n',
  • Nummer to
  • , '\ n']

    Som du kan se, inneholder listen teksten som kommer før en undernode, undernoden og teksten som kommer etter undernoden.

    For å få tilgang til den andre barnetoden, er alt vi trenger å gjøre å bruke indeksnummeret som vist nedenfor:

    skriv ut (førstebarn.innhold [3])

    Dette ville returnere følgende:

  • Nummer to
  • barn:

    Her er ett attributt som gjør nesten det samme som innholdsattributtet. Imidlertid har det en liten forskjell som kan gi stor innvirkning (for de som tar kodeoptimalisering på alvor).

    Barnet attributt returnerer også teksten som kommer før en undernode, selve undernoden og teksten som kommer etter undernoden. Forskjellen her er at den returnerer dem som en generator i stedet for en liste.

    La oss ta en titt på følgende eksempel:

    førstebarn = vår_suppe.finn ("kropp").finn ("ol")
    skriv ut (førstebarn.barn)

    Koden ovenfor gir følgende resultater (adressen på maskinen din trenger ikke å stemme overens med den nedenfor):

    Som du ser, returnerer den bare adressen til generatoren. Vi kan konvertere denne generatoren til en liste.

    Vi kan se dette i eksemplet nedenfor:

    første barn = vår_suppe.finn ("kropp").finn ("ol")
    skriv ut (liste (første_barn.barn))

    Dette gir følgende resultat:

    ["\ n Her er en ordnet liste \ n",
  • Nummer en
  • ,
    '\ n',
  • Nummer to
  • , '\ n']

    etterkommere:

    Mens barn attributt fungerer på å få bare innholdet i en tag i.e. teksten, og noder på første nivå, etterkommere attributt går dypere og gjør mer.

    De etterkommere attributt får all tekst og noder som finnes i barnenoder. Så det returnerer ikke bare barn noder, det returnerer også barnebarn noder.

    Bortsett fra å returnere teksten og kodene, returnerer den også innholdet i kodene som strenger.

    Akkurat som barn Egenskap, etterkommere returnerer resultatene som en generator.

    Vi kan se dette nedenfor:

    første barn = vår_suppe.finn ("kropp").finn ("ol")
    skriv ut (førstebarn.etterkommere)

    Dette gir følgende resultat:

    Som tidligere sett kan vi konvertere dette generatorobjektet til en liste:

    første barn = vår_suppe.finn ("kropp").finn ("ol")
    skriv ut (liste (første_barn.etterkommere))

    Vi ville få listen nedenfor:

    ["\ n Her er en ordnet liste \ n",
  • Nummer en
  • ,
    'Number One', '\ n',
  • Nummer to
  • , 'Nummer to', '\ n']

    Konklusjon

    Der har du det, fem forskjellige måter å få tilgang til barnenoder i HTML-elementer. Det kan være flere måter, men med metodene og attributtene som er diskutert i denne artikkelen, bør man ha tilgang til underordnet node for ethvert HTML-element.

    Hvordan øke FPS i Linux?
    FPS står for Bilder per sekund. FPSs oppgave er å måle bildefrekvensen i videoavspilling eller spillprestasjoner. Med enkle ord betegnes antall uavbru...
    Topp Oculus App Lab-spill
    Hvis du er Oculus-hodesettinnehaver, må du være klar over sideloading. Sidelading er prosessen med å installere ikke-butikkinnhold på hodesettet. Side...
    Topp 10 spill å spille på Ubuntu
    Windows-plattformen har vært en av de dominerende plattformene for spill på grunn av den enorme andelen spill som utvikles i dag for å støtte Windows ...