Vacker soppa

Hitta barnnoder med vacker soppa

Hitta barnnoder med vacker soppa
Uppgiften med webbskrapning är en som kräver förståelse för hur webbsidor är strukturerade. För att få den information som behövs från webbsidor måste man förstå strukturen på webbsidor, analysera de taggar som innehåller den information som behövs och sedan attributen för dessa taggar.

För nybörjare i webbskrapning med BeautifulSoup finns en artikel som diskuterar begreppen webbskrapning med detta kraftfulla bibliotek här.

Den här artikeln är avsedd för programmerare, dataanalytiker, forskare eller ingenjörer som redan har kompetens att extrahera innehåll från webbsidor med hjälp av BeautifulSoup. Om du inte har någon kunskap om detta bibliotek, rekommenderar jag dig att gå igenom BeautifulSoup-handboken för nybörjare.

Nu kan vi fortsätta - jag vill tro att du redan har det här biblioteket installerat.  Om inte, kan du göra detta med kommandot nedan:

pip installera BeautifulSoup4

Eftersom vi arbetar med att extrahera data från HTML måste vi ha en grundläggande HTML-sida för att öva på dessa begrepp.  För den här artikeln skulle vi använda detta HTML-kodavsnitt för övning. Jag kommer att tilldela följande HTML-kod till en variabel med hjälp av de tre citaten i Python.

sample_content = "" "

LinuxHint



För att skapa en oordnad lista används ul-taggen:
 




För att skapa en beställd lista används ol-taggen:
 


    Här är en beställd lista
  1. Nummer ett

  2. Nummer två



Linux-tips, 2018



"" "

Nu när vi har sorterat det, låt oss gå vidare till att arbeta med BeautifulSoup-biblioteket.

Vi kommer att använda oss av ett par metoder och attribut som vi skulle anropa vårt BeautifulSoup-objekt. Vi skulle dock behöva analysera vår sträng med hjälp av BeautifulSoup och sedan tilldela en "our_soup" -variabel.

från bs4 importera BeautifulSoup som bso
our_soup = bso (sample_content, "lxml")

Hädanefter skulle vi arbeta med variabeln "our_soup" och anropa alla våra attribut eller metoder på den.

Om du inte redan vet vad en undernod är är det i grunden en nod (tagg) som finns i en annan nod. I vårt HTML-kodavsnitt är till exempel li-taggar barnnoder för både "ul" och "ol" -taggarna.

Här är de metoder vi skulle titta på:

findChild ():

De findChild metoden används för att hitta den första undernoden för HTML-element. Till exempel när vi tittar på våra "ol" eller "ul" taggar, skulle vi hitta två barn taggar i den. Men när vi använder findChild metod returnerar den bara den första noden som den underordnade noden.

Den här metoden kan vara mycket användbar när vi bara vill hämta den första undernoden till ett HTML-element, eftersom den returnerar det önskade resultatet direkt.

Det returnerade objektet är av typen bs4.element.Märka. Vi kan extrahera texten från den genom att anropa textattributet på den.

Här är ett exempel:

första_barn = vår_soppa.hitta ("kropp").hitta ("ol")
skriva ut (första_barn.findChild ())

Koden ovan skulle returnera följande:

  • Nummer ett
  • För att få texten från taggen kallar vi text attribut på den.

    Tycka om:

    skriva ut (första_barn.findChild ().text)

    För att få följande resultat:

    'Nummer ett'
    findChildren ():

    Vi har tittat på findChild metod och sett hur det fungerar. De findChildren metoden fungerar på liknande sätt, men som namnet antyder hittar den inte bara en barnnod, den får alla barnens noder i en tagg.

    När du behöver hämta alla barnens noder i en tagg, kommer findChildren metoden är vägen att gå. Den här metoden returnerar alla barnnoder i en lista, du kan komma åt den tagg du väljer med dess indexnummer.

    Här är ett exempel:

    första_barn = vår_soppa.hitta ("kropp").hitta ("ol")
    skriva ut (första_barn.findChildren ())

    Detta skulle returnera barnens noder i en lista:

    [
  • Nummer ett
  • ,
  • Nummer två
  • ]

    För att få den andra underordnade noden i listan skulle följande kod göra jobbet:

    skriva ut (första_barn.findChildren () [1])

    För att få följande resultat:

  • Nummer två
  • Det är allt som BeautifulSoup erbjuder när det gäller metoder. Men det slutar inte där. Attribut kan också anropas på våra BeautifulSoup-objekt för att få noden barn / barn / ättling från ett HTML-element.

    innehåll:

    Medan findChildren metoden gjorde det enkelt att extrahera barnens noder, innehåll attribut gör något lite annorlunda.

    De innehåll attribut returnerar en lista med allt innehåll i ett HTML-element, inklusive barnnoder. Så när du ringer till innehåll attribut på ett BeautifulSoup-objekt, skulle det returnera texten som strängar och noderna i taggarna som en bs4.element.Märka objekt.

    Här är ett exempel:

    första_barn = vår_soppa.hitta ("kropp").hitta ("ol")
    skriva ut (första_barn.innehåll)

    Detta returnerar följande:

    ["\ n Här är en beställd lista \ n",
  • Nummer ett
  • ,
    '\ n',
  • Nummer två
  • , '\ n']

    Som du kan se innehåller listan texten som kommer före en barnnod, barnnoden och texten som kommer efter barnnoden.

    För att komma åt den andra barnnoden är allt vi behöver göra att använda dess indexnummer som visas nedan:

    skriva ut (första_barn.innehåll [3])

    Detta skulle returnera följande:

  • Nummer två
  • barn:

    Här är ett attribut som gör nästan samma sak som innehållsattributet. Det har dock en liten skillnad som kan göra en enorm inverkan (för dem som tar kodoptimering på allvar).

    Attributet barn returnerar också texten som kommer före en barnnod, själva barnnoden och texten som kommer efter barnnoden. Skillnaden här är att den returnerar dem som en generator istället för en lista.

    Låt oss ta en titt på följande exempel:

    första_barn = vår_soppa.hitta ("kropp").hitta ("ol")
    skriva ut (första_barn.barn)

    Koden ovan ger följande resultat (adressen på din maskin behöver inte stämma överens med den nedan):

    Som du kan se returnerar den bara generatorns adress. Vi kan konvertera denna generator till en lista.

    Vi kan se detta i exemplet nedan:

    första_barn = vår_soppa.hitta ("kropp").hitta ("ol")
    skriv ut (lista (första_barn.barn))

    Detta ger följande resultat:

    ["\ n Här är en beställd lista \ n",
  • Nummer ett
  • ,
    '\ n',
  • Nummer två
  • , '\ n']

    ättlingar:

    Medan barn attribut fungerar bara för att hämta innehållet i en tagg i.e. texten och noder på första nivån, ättlingar attribut går djupare och gör mer.

    De ättlingar attribut får all text och noder som finns i barnnoder. Så det returnerar inte bara barnnoder, det returnerar också barnbarnsnoder.

    Förutom att returnera texten och taggarna returnerar den också innehållet i taggarna som strängar.

    Precis som barn attribut, ättlingar returnerar sina resultat som en generator.

    Vi kan se detta nedan:

    första_barn = vår_soppa.hitta ("kropp").hitta ("ol")
    skriva ut (första_barn.ättlingar)

    Detta ger följande resultat:

    Som tidigare sett kan vi sedan konvertera detta generatorobjekt till en lista:

    första_barn = vår_soppa.hitta ("kropp").hitta ("ol")
    skriva ut (lista (första_barn.ättlingar))

    Vi skulle få listan nedan:

    ["\ n Här är en beställd lista \ n",
  • Nummer ett
  • ,
    'Nummer ett', '\ n',
  • Nummer två
  • , 'Nummer två', '\ n']

    Slutsats

    Där har du det, fem olika sätt att komma åt barnnoder i HTML-element. Det kan finnas fler sätt, men med de metoder och attribut som diskuteras i den här artikeln borde man kunna komma åt barnnoden för alla HTML-element.

    Installera senaste Dolphin Emulator för Gamecube & Wii på Linux
    Dolphin Emulator låter dig spela dina valda Gamecube & Wii-spel på Linux Personal Computers (PC). Eftersom Dolphin Emulator är en fritt tillgänglig o...
    Hur man använder GameConqueror Cheat Engine i Linux
    Artikeln täcker en guide om hur du använder GameConqueror-fuskmotorn i Linux. Många användare som spelar spel på Windows använder ofta applikationen "...
    Bästa spelkonsolemulatorer för Linux
    Den här artikeln listar populära spelkonsolemuleringsprogram som finns tillgängliga för Linux. Emulation är ett mjukvarukompatibilitetsskikt som emule...