Skaista zupa

Bērnu mezglu atrašana ar skaistu zupu

Bērnu mezglu atrašana ar skaistu zupu
Tīmekļa nokasīšanas uzdevums prasa izpratni par tīmekļa lapu struktūru. Lai iegūtu nepieciešamo informāciju no tīmekļa lapām, ir jāsaprot tīmekļa lapu struktūra, jāanalizē tagi, kas satur nepieciešamo informāciju, un pēc tam šo tagu atribūti.

Iesācējiem tīmekļa skrāpēšanā ar BeautifulSoup šeit var atrast rakstu, kurā apspriesti tīmekļa nokasīšanas jēdzieni ar šo jaudīgo bibliotēku.

Šis raksts ir paredzēts programmētājiem, datu analītiķiem, zinātniekiem vai inženieriem, kuriem jau ir prasme iegūt saturu no tīmekļa lapām, izmantojot BeautifulSoup. Ja jums nav nekādu zināšanu par šo bibliotēku, iesaku jums iet cauri apmācībai BeautifulSoup iesācējiem.

Tagad mēs varam turpināt - es gribu ticēt, ka šī bibliotēka jums jau ir instalēta.  Ja nē, to varat izdarīt, izmantojot tālāk norādīto komandu:

PIP instalējiet BeautifulSoup4

Tā kā mēs strādājam ar datu iegūšanu no HTML, mums ir nepieciešama HTML pamatlapa, kurā praktizēt šos jēdzienus.  Šajā rakstā mēs praksē izmantotu šo HTML fragmentu. Es piešķiršu mainīgajam HTML fragmentu, izmantojot Python trīskāršās pēdiņas.

sample_content = "" "

LinuxHint



Lai izveidotu nesakārtotu sarakstu, tiek izmantots ul tags:
 




Lai izveidotu sakārtotu sarakstu, tiek izmantota ol tag:
 


    Šeit ir sakārtots saraksts
  1. Pirmais

  2. Otrs numurs



Linux padoms, 2018. gads



"" "

Tagad, kad mēs to esam sakārtojuši, pārejam tieši uz darbu ar bibliotēku BeautifulSoup.

Mēs izmantosim dažas metodes un atribūtus, kurus mēs izsauktu uz objekta BeautifulSoup. Tomēr mums vajadzētu parsēt virkni, izmantojot BeautifulSoup, un pēc tam piešķirt mainīgajam “our_soup”.

no bs4 importēt BeautifulSoup kā bso
our_soup = bso (sample_content, "lxml")

Turpmāk mēs strādāsim ar mainīgo “our_soup” un izsauksim tajā visus savus atribūtus vai metodes.

Īsāk sakot, ja jūs vēl nezināt, kas ir bērna mezgls, tas būtībā ir mezgls (tags), kas pastāv citā mezglā. Piemēram, mūsu HTML fragmentā li tagi ir gan “ul”, gan “ol” tagu bērnu mezgli.

Šeit ir metodes, kuras mēs apskatītu:

findChild ():

The atrastBērns metodi izmanto, lai atrastu pirmo HTML elementu pakārtoto mezglu. Piemēram, apskatot mūsu tagus “ol” vai “ul”, mēs tajā atradīsim divus bērnu tagus. Tomēr, kad mēs izmantojam atrastBērns metodi, tas atgriež tikai pirmo mezglu kā bērnu mezglu.

Šī metode var izrādīties ļoti noderīga, ja mēs vēlamies iegūt tikai pirmo HTML elementa pakārtoto mezglu, jo tā uzreiz atgriež nepieciešamo rezultātu.

Atgrieztais objekts ir šāda veida bs4.elements.Atzīmēt. Mēs varam no tā izvilkt tekstu, izsaucot tajā teksta atribūtu.

Lūk, piemērs:

pirmais_bērns = mūsu_zupa.atrast ("ķermenis").atrast ("ol")
izdrukāt (pirmais_bērns.findChild ())

Iepriekš minētais kods atgriezīs:

  • Pirmais
  • Lai iegūtu tekstu no taga, mēs izsaucam tekstu atribūts uz tā.

    Patīk:

    izdrukāt (pirmais_bērns.findBērns ().teksts)

    Lai iegūtu šādu rezultātu:

    'Pirmais'
    atrastBērni ():

    Mēs esam apskatījuši atrastBērns metodi un redzējis, kā tā darbojas. The atrastBērni metode darbojas līdzīgi, tomēr, kā norāda nosaukums, tā neatrod tikai vienu bērna mezglu, tā tagā iegūst visus bērnu mezglus.

    Kad jums ir jāiegūst tagā visi bērnu mezgli, atrastBērni metode ir veids, kā iet. Šī metode atgriež visus bērnu mezglus sarakstā. Jūs varat piekļūt izvēlētajam tagam, izmantojot tā indeksa numuru.

    Lūk, piemērs:

    pirmais_bērns = mūsu_zupa.atrast ("ķermenis").atrast ("ol")
    izdrukāt (pirmais_bērns.atrastBērni ()

    Tas atgrieztu bērnu mezglus sarakstā:

    [
  • Pirmais
  • ,
  • Otrs numurs
  • ]

    Lai iegūtu otro bērnu mezglu sarakstā, darbu izpildīs šāds kods:

    izdrukāt (pirmais_bērns.atrastBērni () [1])

    Lai iegūtu šādu rezultātu:

  • Otrs numurs
  • Tas ir viss, ko BeautifulSoup nodrošina metožu jomā. Tomēr ar to viss nebeidzas. Atribūtus var izsaukt arī uz mūsu BeautifulSoup objektiem, lai iegūtu bērna / bērnu / pēcnācēju mezglu no HTML elementa.

    saturs:

    Kamēr atrastBērni metode veica vienkāršo darbu, izvelkot bērnu mezglus, saturu atribūti dara kaut ko mazliet atšķirīgu.

    The saturu atribūts atgriež visa HTML elementa satura sarakstu, ieskaitot bērnu mezglus. Tātad, kad jūs piezvanāt saturu atribūtam BeautifulSoup objektā, tas atgriezīs tekstu kā virknes un tagos esošos mezglus kā bs4.elements.Atzīmēt objekts.

    Lūk, piemērs:

    pirmais_bērns = mūsu_zupa.atrast ("ķermenis").atrast ("ol")
    izdrukāt (pirmais_bērns.saturs)

    Tādējādi tiek parādīts:

    ["\ n Šeit ir sakārtots saraksts \ n",
  • Pirmais
  • ,
    '\ n',
  • Otrs numurs
  • , '\ n']

    Kā redzat, sarakstā ir teksts, kas atrodas pirms bērna mezgla, bērna mezgls un teksts, kas nāk pēc bērna mezgla.

    Lai piekļūtu otrajam bērna mezglam, viss, kas mums jādara, ir izmantot tā indeksa numuru, kā parādīts zemāk:

    izdrukāt (pirmais_bērns.saturs [3])

    Tas atgriezīs sekojošo:

  • Otrs numurs
  • bērni:

    Šeit ir viens atribūts, kas dara gandrīz to pašu, ko atribūts content. Tomēr tam ir viena neliela atšķirība, kas varētu radīt milzīgu ietekmi (tiem, kas nopietni uztver koda optimizāciju).

    Bērnu atribūts atgriež arī tekstu, kas atrodas pirms bērna mezgla, paša bērna mezglu un tekstu, kas nāk pēc bērna mezgla. Atšķirība šeit ir tā, ka tā atgriež tos kā ģeneratoru, nevis sarakstu.

    Apskatīsim šādu piemēru:

    pirmais_bērns = mūsu_zupa.atrast ("ķermenis").atrast ("ol")
    izdrukāt (pirmais_bērns.bērni)

    Iepriekš minētais kods sniedz šādus rezultātus (jūsu datora adresei nav jāsakrīt ar zemāk redzamo):

    Kā redzat, tas atgriež tikai ģeneratora adresi. Mēs varētu pārveidot šo ģeneratoru sarakstā.

    Mēs to varam redzēt zemāk esošajā piemērā:

    pirmais_bērns = mūsu_zupa.atrast ("ķermenis").atrast ("ol")
    izdrukāt (saraksts (pirmais_bērns.bērni))

    Tas dod šādu rezultātu:

    ["\ n Šeit ir sakārtots saraksts \ n",
  • Pirmais
  • ,
    '\ n',
  • Otrs numurs
  • , '\ n']

    pēcnācēji:

    Kamēr bērni atribūts darbojas, lai tagā iegūtu tikai saturu i.e. tekstu un mezglus pirmajā līmenī pēcnācēji atribūts iet dziļāk un dara vairāk.

    The pēcnācēji atribūts iegūst visu tekstu un mezglus, kas pastāv bērnu mezglos. Tātad tas neatgriež tikai bērnu, bet arī mazbērnu mezglus.

    Papildus teksta un tagu atgriešanai tas tagos esošo saturu atdod arī kā virknes.

    Tāpat kā bērni atribūts, pēcnācēji atgriež savus rezultātus kā ģenerators.

    Mēs to varam redzēt zemāk:

    pirmais_bērns = mūsu_zupa.atrast ("ķermenis").atrast ("ol")
    izdrukāt (pirmais_bērns.pēcnācēji)

    Tas dod šādu rezultātu:

    Kā redzams iepriekš, mēs pēc tam varam pārveidot šo ģeneratora objektu sarakstā:

    pirmais_bērns = mūsu_zupa.atrast ("ķermenis").atrast ("ol")
    izdrukāt (saraksts (pirmais_bērns.pēcnācēji))

    Mēs iegūtu šādu sarakstu:

    ["\ n Šeit ir sakārtots saraksts \ n",
  • Pirmais
  • ,
    “Pirmais numurs”, “\ n”,
  • Otrs numurs
  • , 'Divi skaitļi', '\ n']

    Secinājums

    Šeit jums ir pieci dažādi veidi, kā piekļūt bērnu mezgliem HTML elementos. Varētu būt vairāk veidu, taču ar šajā rakstā apskatītajām metodēm un atribūtiem vajadzētu būt iespējai piekļūt jebkura HTML elementa pakārtotajam mezglam.

    Tomb Raider for Linux apmācība
    Tomb Raider ēna ir divpadsmitais papildinājums Tomb Raider sērijai - darbības piedzīvojumu spēļu franšīzei, kuru izveidoja Eidos Montreal. Spēli gan k...
    Kā palielināt FPS Linux?
    FPS apzīmē Kadri sekundē. FPS uzdevums ir izmērīt kadru ātrumu video atskaņošanā vai spēļu izrādēs. Vienkāršos vārdos nepārtrauktu pilnekrāna attēlu s...
    Populārākās Oculus App Lab spēles
    Ja esat Oculus austiņu īpašnieks, jums ir jāsazinās par sānu ielādi. Sānu ielāde ir process, kurā austiņās tiek instalēts saturs, kas nav veikals. Sid...