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 BeautifulSoup4Tā 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 = "" "
Lai izveidotu nesakārtotu sarakstu, tiek izmantots ul tags:
- Pirmais variants
- Otrais variants
Šeit ir nesakārtots saraksts
Lai izveidotu sakārtotu sarakstu, tiek izmantota ol tag:
- Pirmais
- Otrs numurs
Šeit ir sakārtots saraksts
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ā bsoour_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:
- atrastBērns
- atrastBērni
- saturu
- bērni
- pēcnācēji
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:
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ā:
[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:
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",'\ 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:
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",'\ 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 numurs”, “\ 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.