Algajatele veebi kraapimisel BeautifulSoupiga leiate artikli, milles käsitletakse selle võimsa teegiga veebi kraapimise mõisteid.
See artikkel on mõeldud programmeerijatele, andmeanalüütikutele, teadlastele või inseneridele, kellel juba on oskusi veebilehtedelt sisu BeautifulSoupi abil välja tõmmata. Kui teil pole sellest raamatukogust mingeid teadmisi, soovitan teil läbida algajatele mõeldud õpetus BeautifulSoup.
Nüüd saame jätkata - tahan uskuda, et teil on see kogu juba installitud. Kui ei, siis saate seda teha alloleva käsuga:
pip installige BeautifulSoup4Kuna töötame andmete HTML-ist väljavõtmisega, peab nende mõistete praktiseerimiseks olema HTML-i põhileht. Selle artikli jaoks kasutaksime seda HTML-i fragmenti harjutamiseks. Määran järgmise HTML-i fragmenti muutujale, kasutades Pythonis kolmekordset jutumärki.
sample_content = "" "
Järjestamata loendi koostamiseks kasutatakse ul-silti:
- Esimene võimalus
- Teine võimalus
Siin on tellimata loend
Tellitud loendi koostamiseks kasutatakse ol-silti:
- Number üks
- Number kaks
Siin on järjestatud loend
Linuxi vihje, 2018
"" "
Nüüd, kui oleme selle sordinud, läheme kohe tööle BeautifulSoupi teegiga.
Kasutame paari meetodit ja atribuuti, mida kutsume oma objektile BeautifulSoup. Peaksime aga oma stringi sõeluma BeautifulSoupi abil ja määrama seejärel muutujale “meie_supp”.
bs4-st importige BeautifulSoup bso-ksmeie_supp = bso (näidis_sisu, "lxml")
Nüüdsest töötaksime muutujaga "meie_supp" ja kutsuksime sellele kõik oma atribuudid või meetodid.
Lühidalt öeldes, kui te ei tea veel, mis on lapse sõlm, siis on see põhimõtteliselt sõlm (silt), mis eksisteerib teise sõlme sees. Näiteks meie HTML-i jupis on li-märgendid nii „ul” kui „ol” märgendi laste sõlmed.
Siin on meetodid, mida me vaataksime:
- findChild
- leidaLapsed
- sisu
- lapsed
- järeltulijad
findChild ():
The findChild meetodit kasutatakse HTML-elementide esimese alamsõlme leidmiseks. Näiteks kui vaatame oma „ol” või „ul” silte, leiame sellest kaks lapsemärki. Kuid kui me kasutame findChild meetodi, tagastab see esimese sõlme ainult alamsõlmena.
See meetod võib osutuda väga kasulikuks, kui soovime saada ainult HTML-elemendi esimese alamsõlme, kuna see tagastab vajaliku tulemuse kohe.
Tagastatav objekt on seda tüüpi bs4.element.Silt. Teksti saame sellest välja tõmmata, kutsudes sellele teksti atribuudi.
Siin on näide:
esimene_laps = meie_supp.leidma ("keha").leidma ("ol")print (esimene_laps.findChild ())
Ülaltoodud kood tagastab järgmise:
Sildilt teksti saamiseks kutsume teksti atribuut sellel.
Nagu:
print (esimene_laps.findChild ().tekst)Järgmise tulemuse saamiseks:
'Number üks'findChildren ():
Oleme heitnud pilgu findChild meetodit ja näinud, kuidas see töötab. The leidaLapsed meetod toimib sarnaselt, kuid nagu nimigi ütleb, ei leia see ainult ühte lapse sõlme, see saab sildis kõik laste sõlmed.
Kui teil on vaja kõik lapsed sõlmed sildile saada, leidaLapsed meetod on tee minna. See meetod tagastab loendis kõik lastesõlmed, pääsete valitud märgendile juurde, kasutades selle registrinumbrit.
Siin on näide:
esimene_laps = meie_supp.leidma ("keha").leidma ("ol")print (esimene_laps.leiaLapsed ()
See tagastaks laste sõlmed loendis:
[Loendis teise alamsõlme saamiseks täidab seda tööd järgmine kood:
print (esimene_laps.findLapsed () [1])Järgmise tulemuse saamiseks:
See on kõik, mida BeautifulSoup pakub meetodite osas. Sellega see siiski ei lõpe. Atribuute saab kutsuda ka meie BeautifulSoupi objektidele, et saada lapse / laste / järeltulijate sõlm HTML-elemendist.
sisu:
Samal ajal kui leidaLapsed meetod tegi laste sõlmede väljatõmbamiseks sirgjoonelise töö sisu atribuudid teeb midagi natuke teistmoodi.
The sisu atribuut tagastab kogu HTML-elemendi sisu loendi, sealhulgas laste sõlmed. Nii et kui helistate sisu atribuudi objektil BeautifulSoup tagastaks teksti stringidena ja siltide sõlmed a-na bs4.element.Silt objekt.
Siin on näide:
esimene_laps = meie_supp.leidma ("keha").leidma ("ol")print (esimene_laps.sisu)
See tagastab järgmise:
["\ n Siin on järjestatud loend \ n",'\ n',
Nagu näete, sisaldab loend teksti, mis tuleb enne lapse sõlme, lapse sõlme ja teksti, mis tuleb pärast lapse sõlme.
Teise alamsõlme juurde pääsemiseks peame kasutama ainult selle indeksi numbrit, nagu allpool näidatud:
print (esimene_laps.sisu [3])See tagastaks järgmise:
lapsed:
Siin on üks atribuut, mis teeb peaaegu sama, mis atribuut content. Kuid sellel on üks väike erinevus, mis võib tohutult mõjutada (neile, kes võtavad koodi optimeerimist tõsiselt).
Atribuut Lapsed tagastab ka teksti, mis tuleb enne lapse sõlme, lapse sõlme enda ja teksti, mis tuleb pärast lapse sõlme. Erinevus on selles, et see tagastab need loendi asemel generaatorina.
Vaatame järgmist näidet:
esimene_laps = meie_supp.leidma ("keha").leidma ("ol")print (esimene_laps.lapsed)
Ülaltoodud kood annab järgmised tulemused (teie masina aadress ei pea vastama allolevale aadressile):
Nagu näete, tagastab see ainult generaatori aadressi. Me võiksime selle generaatori teisendada loendiks.
Näeme seda allpool toodud näites:
esimene_laps = meie_supp.leidma ("keha").leidma ("ol")print (loend (esimene_laps.lapsed))
See annab järgmise tulemuse:
["\ n Siin on järjestatud loend \ n",'\ n',
järglased:
Samal ajal kui lapsed atribuut töötab ainult siltide sisusse jõudmisel i.e. teksti ja sõlmed esimesel tasemel järeltulijad atribuut läheb sügavamale ja teeb rohkem.
The järeltulijad atribuut saab kogu lapse sõlmedes oleva teksti ja sõlmed. Nii et see ei tagasta ainult laste sõlmi, vaid ka lapselaste sõlmi.
Lisaks teksti ja siltide tagastamisele tagastab see ka siltide sisu stringidena.
Täpselt nagu lapsed atribuut, järeltulijad tagastab oma tulemused generaatorina.
Näeme seda allpool:
esimene_laps = meie_supp.leidma ("keha").leidma ("ol")print (esimene_laps.järeltulijad)
See annab järgmise tulemuse:
Nagu varem näha, saame selle generaatori objekti seejärel loendiks teisendada:
esimene_laps = meie_supp.leidma ("keha").leidma ("ol")print (loend (esimene_laps.järglased))
Me saaksime allpool oleva loendi:
["\ n Siin on järjestatud loend \ n","Number üks", "\ n",
Järeldus
Seal on teil viis erinevat viisi, kuidas pääseda HTML-elementide laste sõlmedele juurde. Võimalusi võiks olla rohkem, kuid käesolevas artiklis käsitletud meetodite ja atribuutide abil peaks olema võimalik juurde pääseda mis tahes HTML-elemendi alamsõlmele.