Pradedantiesiems žiniatinklio grandymo su „BeautifulSoup“ pradedantiesiems straipsnį, kuriame aptariamos žiniatinklio grandymo su šia galinga biblioteka sąvokos, galite rasti čia.
Šis straipsnis skirtas programuotojams, duomenų analitikams, mokslininkams ar inžinieriams, kurie jau turi įgūdžių išgauti turinį iš tinklalapių naudodami „BeautifulSoup“. Jei neturite jokių žinių apie šią biblioteką, patariu pereiti pamoką „BeautifulSoup“ pradedantiesiems.
Dabar galime tęsti - noriu tikėti, kad jau turite šią biblioteką. Jei ne, galite tai padaryti naudodami žemiau esančią komandą:
„pip“ įdiekite „BeautifulSoup4“Kadangi dirbame su duomenų išgaunimu iš HTML, turime turėti pagrindinį HTML puslapį, kuriame galėtume praktikuoti šias sąvokas. Šiame straipsnyje mes naudosime šį HTML fragmentą praktikai. Aš ketinu priskirti šį HTML fragmentą kintamajam naudodamas trigubas „Python“ kabutes.
sample_content = "" "
Norėdami sudaryti nesutvarkytą sąrašą, naudojama ul žyma:
- Pirmasis variantas
- Antrasis variantas
Čia yra nesutvarkytas sąrašas
Norėdami sudaryti užsakytą sąrašą, naudojama ol žyma:
- Numeris vienas
- Antras numeris
Pateikiame sąrašą pagal užsakymą
„Linux“ užuomina, 2018 m
"" "
Dabar, kai tai sutvarkėme, pereikime prie darbo su „BeautifulSoup“ biblioteka.
Mes ketiname naudoti keletą metodų ir atributų, kuriuos mes paskambintume į „BeautifulSoup“ objektą. Tačiau mes turėtume analizuoti savo eilutę naudodami „BeautifulSoup“ ir paskui priskirti kintamajam „our_soup“.
iš bs4 importuokite BeautifulSoup kaip bsoour_soup = bso (sample_content, "lxml")
Nuo šiol mes dirbsime su „our_soup“ kintamuoju ir jame kvietėme visus savo atributus ar metodus.
Trumpai tariant, jei dar nežinote, kas yra vaiko mazgas, tai iš esmės yra mazgas (žyma), egzistuojantis kito mazgo viduje. Pavyzdžiui, mūsų HTML fragmente „li“ žymos yra „ul“ ir „ol“ žymų vaikų mazgai.
Štai metodai, kuriuos mes pažvelgtume:
- rastiVaiką
- rastiVaikai
- turinį
- vaikai
- palikuonys
findChild ():
The rastiVaiką metodas naudojamas pirmajam HTML elementų antriniam mazgui rasti. Pavyzdžiui, pažiūrėję į savo „ol“ arba „ul“ žymas, joje rasime dvi vaikų žymas. Tačiau kai mes naudojame rastiVaiką metodas, jis grąžina tik pirmąjį mazgą kaip antrąjį mazgą.
Šis metodas gali pasirodyti labai naudingas, kai norime gauti tik pirmąjį HTML elemento antrinį mazgą, nes jis iškart pateikia reikiamą rezultatą.
Grąžintas objektas yra tokio tipo bs4.elementas.Žyma. Iš jo galime išskleisti tekstą, paskambinę ant jo teksto atributui.
Štai pavyzdys:
first_child = mūsų_supa.rasti („kūnas“).rasti („ol“)spausdinti (first_child.findChild ())
Aukščiau pateiktas kodas grąžins:
Norėdami gauti tekstą iš žymos, mes vadiname teksto atributas ant jo.
Kaip:
spausdinti (first_child.findChild ().tekstas)Norėdami gauti šį rezultatą:
'Numeris vienas'rastiVaikai ():
Mes pažvelgėme į rastiVaiką metodą ir pamatė, kaip jis veikia. The rastiVaikai metodas veikia panašiai, tačiau, kaip rodo pavadinimas, jis neranda tik vieno vaiko mazgo, jis gauna visus vaikų mazgelius žymoje.
Kai reikia pažymėti visus vaikų mazgus, pažymėkite rastiVaikai metodas yra kelias. Šis metodas pateikia visus vaikų mazgus sąraše. Galite pasiekti savo pasirinktą žymą naudodami jos indekso numerį.
Štai pavyzdys:
first_child = mūsų_supa.rasti („kūnas“).rasti („ol“)spausdinti (first_child.rastiVaikai ()
Tai grąžins vaikų mazgus sąraše:
[Norėdami gauti antrą vaiko mazgą sąraše, šį kodą atliks:
spausdinti (first_child.rastiVaikai () [1])Norėdami gauti šį rezultatą:
Tai viskas, ką „BeautifulSoup“ teikia kalbant apie metodus. Tačiau tuo viskas nesibaigia. Atributus taip pat galima iškviesti mūsų „BeautifulSoup“ objektuose, kad gautumėte vaiko / vaikų / palikuonių mazgą iš HTML elemento.
turinys:
Kol rastiVaikai metodas atliko nesudėtingą vaikų mazgų ištraukimo darbą turinį atributai daro kažką šiek tiek kitokio.
The turinį atributas pateikia viso HTML elemento turinio sąrašą, įskaitant vaikų mazgus. Taigi, kai paskambinsite turinį objekto „BeautifulSoup“ atributas grąžins tekstą kaip eilutes, o žymų mazgus - kaip bs4.elementas.Žyma objektas.
Štai pavyzdys:
first_child = mūsų_supa.rasti („kūnas“).rasti („ol“)spausdinti (first_child.turinys)
Tai grąžina:
["\ n Čia yra surikiuotas sąrašas \ n",„\ n“,
Kaip matote, sąraše yra tekstas, einantis prieš vaiko mazgą, vaiko mazgas ir tekstas, pateiktas po vaiko mazgo.
Norėdami pasiekti antrą antrinį mazgo mazgą, turime tik pasinaudoti jo indekso numeriu, kaip parodyta žemiau:
spausdinti (first_child.turinys [3])Tai grąžintų:
vaikai:
Čia yra vienas atributas, kuris daro beveik tą patį, ką ir turinio atributas. Tačiau jis turi vieną nedidelį skirtumą, kuris gali padaryti didžiulį poveikį (tiems, kurie rimtai vertina kodo optimizavimą).
Atributas „vaikai“ taip pat pateikia tekstą, pateiktą prieš vaiko mazgą, patį vaiko mazgą ir tekstą, pateiktą po vaiko mazgo. Čia skirtumas yra tas, kad jis grąžina juos kaip generatorių, o ne sąrašą.
Pažvelkime į šį pavyzdį:
first_child = mūsų_supa.rasti („kūnas“).rasti („ol“)spausdinti (first_child.vaikai)
Aukščiau pateiktas kodas suteikia šiuos rezultatus (jūsų kompiuteryje nurodytas adresas neturi sutapti su toliau pateiktu):
Kaip matote, jis pateikia tik generatoriaus adresą. Šį generatorių galėtume konvertuoti į sąrašą.
Tai galime pamatyti toliau pateiktame pavyzdyje:
first_child = mūsų_supa.rasti („kūnas“).rasti („ol“)spausdinti (sąrašas (pirmasis_vaikas.vaikai))
Tai duoda tokį rezultatą:
["\ n Čia yra surikiuotas sąrašas \ n",„\ n“,
palikuonys:
Kol vaikai atributas veikia gaunant tik turinį žymos viduje, t.e. tekstas ir mazgai pirmajame lygyje palikuonys atributas gilinasi ir daro daugiau.
The palikuonys atributas gauna visą tekstą ir mazgus, esančius vaikų mazguose. Taigi jis negrąžina tik vaikų mazgų, bet ir anūkų mazgų.
Be teksto ir žymų grąžinimo, jis taip pat grąžina žymų turinį kaip eilutes.
Visai kaip vaikai atributas, palikuonys pateikia savo rezultatus kaip generatorius.
Tai galime pamatyti žemiau:
first_child = mūsų_supa.rasti („kūnas“).rasti („ol“)spausdinti (first_child.palikuonys)
Tai duoda tokį rezultatą:
Kaip matėme anksčiau, tada galime konvertuoti šį generatoriaus objektą į sąrašą:
first_child = mūsų_supa.rasti („kūnas“).rasti („ol“)spausdinti (sąrašas (pirmasis_vaikas.palikuonys)
Mes gautume žemiau pateiktą sąrašą:
["\ n Čia yra surikiuotas sąrašas \ n",„Numeris vienas“, „\ n“,
Išvada
Čia jūs turite penkis skirtingus būdus, kaip pasiekti vaikų mazgus HTML elementuose. Gali būti ir daugiau būdų, tačiau šiame straipsnyje aptartais metodais ir atributais turėtų būti galima pasiekti bet kurio HTML elemento antrinį mazgą.