Smuk suppe

Finde børneknuder med smuk suppe

Finde børneknuder med smuk suppe
Opgaven med webskrabning er en, der kræver forståelse af, hvordan websider er struktureret. For at få de nødvendige oplysninger fra websider, skal man forstå websides struktur, analysere de tags, der indeholder de nødvendige oplysninger, og derefter attributterne for disse tags.

For begyndere inden webskrabning med BeautifulSoup kan en artikel, der diskuterer begreberne webskrabning med dette kraftfulde bibliotek, findes her.

Denne artikel er for programmører, dataanalytikere, forskere eller ingeniører, der allerede har færdighederne i at udtrække indhold fra websider ved hjælp af BeautifulSoup. Hvis du ikke har noget kendskab til dette bibliotek, anbefaler jeg dig at gennemgå BeautifulSoup-tutorial for begyndere.

Nu kan vi fortsætte - jeg vil tro, at du allerede har dette bibliotek installeret.  Hvis ikke, kan du gøre dette ved hjælp af kommandoen nedenfor:

pip installer BeautifulSoup4

Da vi arbejder med at udtrække data fra HTML, skal vi have en grundlæggende HTML-side til at øve disse koncepter på.  Til denne artikel vil vi bruge dette HTML-uddrag til praksis. Jeg vil tildele følgende HTML-uddrag til en variabel ved hjælp af de tredobbelte citater i Python.

sample_content = "" "

LinuxHint



For at oprette en ikke-ordnet liste bruges ul-koden:
 




For at lave en ordnet liste bruges ol-taggen:
 


    Her er en ordnet liste
  1. Nummer et

  2. Nummer to



Linux-tip, 2018



"" "

Nu hvor vi har sorteret det, lad os gå lige ind i at arbejde med BeautifulSoup-biblioteket.

Vi vil bruge et par metoder og attributter, som vi kalder på vores BeautifulSoup-objekt. Vi skal dog analysere vores streng ved hjælp af BeautifulSoup og derefter tildele en "vores_soup" -variabel.

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

Fremover vil vi arbejde med variablen "vores_soup" og kalde alle vores attributter eller metoder på den.

På en hurtig note, hvis du ikke allerede ved, hvad en undernode er, er det dybest set en node (tag), der findes inde i en anden node. I vores HTML-uddrag er for eksempel li-tags underordnede noder for både "ul" og "ol" tags.

Her er de metoder, vi vil se på:

findChild ():

Det findChild Metoden bruges til at finde den første underknude af HTML-elementer. For eksempel når vi kigger på vores “ol” eller “ul” tags, vil vi finde to børn tags i den. Men når vi bruger findChild metode returnerer den kun den første node som den underordnede node.

Denne metode kan vise sig meget nyttig, når vi kun ønsker at få den første underknude til et HTML-element, da den med det samme returnerer det krævede resultat.

Det returnerede objekt er af typen bs4.element.Tag. Vi kan udtrække teksten fra den ved at kalde tekstattributten på den.

Her er et eksempel:

førstebarn = vores_suppe.find ("krop").find ("ol")
udskriv (førstebarn.findChild ())

Koden ovenfor vil returnere følgende:

  • Nummer et
  • For at få teksten fra tagget kalder vi tekst attribut på det.

    Synes godt om:

    udskriv (førstebarn.findChild ().tekst)

    For at få følgende resultat:

    'Nummer et'
    findChildren ():

    Vi har kigget på findChild metode og set hvordan det fungerer. Det findBørn metoden fungerer på lignende måder, men som navnet antyder, finder den ikke kun en undernode, den får alle børnens noder i et tag.

    Når du har brug for at få alle børneknudepunkterne i et tag, vises findBørn metoden er vejen at gå. Denne metode returnerer alle børneknudepunkterne på en liste, du kan få adgang til det valgte mærke ved hjælp af dets indeksnummer.

    Her er et eksempel:

    førstebarn = vores_suppe.find ("krop").find ("ol")
    udskriv (førstebarn.findChildren ())

    Dette vil returnere børnenoderne på en liste:

    [
  • Nummer et
  • ,
  • Nummer to
  • ]

    For at få det andet underordnede knudepunkt på listen vil følgende kode gøre jobbet:

    udskriv (førstebarn.findChildren () [1])

    For at få følgende resultat:

  • Nummer to
  • Det er alt, hvad BeautifulSoup giver, når det kommer til metoder. Det slutter dog ikke der. Attributter kan også kaldes på vores BeautifulSoup-objekter for at få noden til barn / børn / efterkommere fra et HTML-element.

    indhold:

    Mens findBørn metoden gjorde det ligefremme job med at udvinde børneknudepunkterne indhold attributter gør noget lidt anderledes.

    Det indhold attribut returnerer en liste over alt indholdet i et HTML-element, inklusive underordnede noder. Så når du ringer til indhold attribut på et BeautifulSoup-objekt, ville det returnere teksten som strenge og noderne i tags som en bs4.element.Tag objekt.

    Her er et eksempel:

    førstebarn = vores_suppe.find ("krop").find ("ol")
    udskriv (førstebarn.indhold)

    Dette returnerer følgende:

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

    Som du kan se, indeholder listen den tekst, der kommer før en undernode, undernoden og den tekst, der kommer efter undernoden.

    For at få adgang til det andet underordnede knudepunkt er alt, hvad vi skal gøre, at gøre brug af dets indeksnummer som vist nedenfor:

    udskriv (førstebarn.indhold [3])

    Dette ville returnere følgende:

  • Nummer to
  • børn:

    Her er en attribut, der gør næsten det samme som indholdsattributten. Det har dog en lille forskel, der kan få stor indflydelse (for dem, der tager kodeoptimering alvorligt).

    Attributten børn returnerer også teksten, der kommer før en undernode, selve undernoden og den tekst, der kommer efter undernoden. Forskellen her er, at den returnerer dem som en generator i stedet for en liste.

    Lad os se på følgende eksempel:

    førstebarn = vores_suppe.find ("krop").find ("ol")
    udskriv (førstebarn.børn)

    Koden ovenfor giver følgende resultater (adressen på din maskine behøver ikke at stemme overens med nedenstående):

    Som du kan se, returnerer det kun generatorens adresse. Vi kunne konvertere denne generator til en liste.

    Vi kan se dette i eksemplet nedenfor:

    førstebarn = vores_suppe.find ("krop").find ("ol")
    udskriv (liste (første_barn.børn))

    Dette giver følgende resultat:

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

    efterkommere:

    Mens børn attribut fungerer kun ved at hente indholdet i et tag i.e. teksten og noder på det første niveau, efterkommere attribut går dybere og gør mere.

    Det efterkommere attribut får al den tekst og noder, der findes i børnenoder. Så det returnerer ikke kun børneknuder, det returnerer også børnebarneknuder.

    Bortset fra at returnere tekst og tags, returnerer det også indholdet i tags som strenge.

    Ligesom børn attribut, efterkommere returnerer sine resultater som en generator.

    Vi kan se dette nedenfor:

    førstebarn = vores_suppe.find ("krop").find ("ol")
    udskriv (førstebarn.efterkommere)

    Dette giver følgende resultat:

    Som set tidligere kan vi derefter konvertere dette generatorobjekt til en liste:

    førstebarn = vores_suppe.find ("krop").find ("ol")
    udskriv (liste (første_barn.efterkommere))

    Vi får listen nedenfor:

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

    Konklusion

    Der har du det, fem forskellige måder at få adgang til underordnede noder i HTML-elementer. Der kunne være flere måder, men med de metoder og attributter, der diskuteres i denne artikel, skulle man være i stand til at få adgang til underknudepunktet for ethvert HTML-element.

    Vulkan til Linux-brugere
    Med hver nye generation af grafikkort ser vi spiludviklere skubbe grænserne for grafisk troskab og komme et skridt tættere på fotorealisme. Men på tro...
    OpenTTD vs Simutrans
    Oprettelse af din egen transportsimulering kan være sjovt, afslappende og ekstremt lokkende. Derfor skal du sørge for at prøve så mange spil som mulig...
    OpenTTD Tutorial
    OpenTTD er et af de mest populære forretningssimuleringsspil derude. I dette spil skal du oprette en vidunderlig transportvirksomhed. Du starter dog i...