IlusSupp

XML-failide sõelumine Pythoni BeautifulSoupi abil

XML-failide sõelumine Pythoni BeautifulSoupi abil
Andmeid on sõna otseses mõttes kõikjal, igasugustes dokumentides. Kuid mitte kõik see pole kasulik, seetõttu on vaja seda sõeluda, et saada vajalikke osi. XML-dokumendid on üks sellistest andmetega dokumentidest. Need on väga sarnased HTML-failidega, kuna neil on peaaegu samasugune struktuur. Seega peate need olulise teabe saamiseks parsima nagu HTML-iga töötades.

XML-failide sõelumisel on kaks peamist aspekti. Nemad on:

Peate leidma märgendi, mis sisaldab soovitud teavet, ja seejärel selle teabe ekstraktima. Enne selle artikli lõppu saate teada, kuidas XML-failidega töötamisel mõlemat teha.

Paigaldamine

BeautifulSoup on Pythoniga veebi kraapimise osas üks kõige enam kasutatavaid teeke. Kuna XML-failid sarnanevad HTML-failidega, on see võimeline neid ka sõeluma. XML-failide sõelumiseks BeautifulSoupi abil on kõige parem kasutada Pythoni faile lxml parser.

Mõlemat teeki saate installida, kasutades pip installimistööriista alloleva käsu kaudu:

pip install bs4 lxml

Mõlema teegi eduka installimise kinnitamiseks võite aktiveerida interaktiivse kesta ja proovida mõlemat importida. Kui ühtegi viga ei kuvata, olete valmis jätkama ülejäänud artiklit.

Siin on näide:

$ python
Python 3.7.4 (sildid / v3.7.4: e09359112e, 8. juuli 2019, 20:34:20)
[MSC v.1916 64 bit (AMD64)] Win32-l
Lisateabe saamiseks sisestage "abi", "autoriõigus", "krediit" või "litsents".
>>> import bs4
>>> impordi lxml
>>>

Enne jätkamist peaksite looma XML-faili allolevast koodijupist. See on üsna lihtne ja peaks sobima kasutusjuhtumitega, mille kohta saate teada ülejäänud artiklist. Lihtsalt kopeerige, kleepige redaktorisse ja salvestage; nimi nagu proov.xml peaks piisama.



Puu

Esiteks
Teiseks

Kolmandaks

Üks
Kaks
Kaksikud


Neljandaks

Nüüd oma Pythoni skriptis; peate XML-faili lugema nagu tavalist faili, seejärel edastama selle BeautifulSoupi. Selle artikli ülejäänud osa kasutab järgmist bs_content muutuja, seega on oluline, et teete selle sammu.

# Impordi BeautifulSoup
bs4-st importige BeautifulSoup b-dena
sisu = []
# Lugege XML-faili
avatud ("proov.xml "," r ") failina:
# Lugege failis kõiki ridu, readlines () tagastab ridade loendi
sisu = fail.readlines ()
# Ühendage loendis olevad read stringiks
sisu = "".liitu (sisu)
bs_content = bs (sisu, "lxml")

Impordi kohal olev koodivalim IlusSupp, siis loeb see XML-faili nagu tavaline fail. Pärast seda edastab see sisu imporditud IlusSupp raamatukogu kui ka valitud parser.

Märkate, et koodi ei impordita lxml. See ei pea nii olema IlusSupp valib lxml parser läbimise tagajärjel „Lxml” objektile.

Nüüd saate jätkata ülejäänud artikliga.

Siltide leidmine

XML-failide sõelumise üks olulisemaid etappe on siltide otsimine. BeautifulSoupi kasutamisel on selle saavutamiseks mitu võimalust; nii et peate teadma käputäie kohta, et teil oleks sobiva olukorra jaoks parimad tööriistad.

XML-dokumentidest leiate sildid järgmiselt:

Siltide leidmine nimede järgi

Nimede järgi siltide leidmisel võite kasutada kahte meetodit BeautifulSoup. Kasutusjuhud on siiski erinevad; heidame neile pilgu.

leidma

Isikliku kogemuse põhjal kasutate leidma meetodit sagedamini kui teisi selles artiklis märgendite leidmise. Leidemärgis võtab vastu märgendi nime, mille soovite hankida, ja tagastab sildi objekti BeautifulSoup, kui selle leiab; muul juhul naaseb Puudub.

Siin on näide:

>>> tulemus = bs_content.leidma ("andmed")
>>> print (tulemus)
Üks
>>> tulemus = bs_content.leidma ("ainulaadne")
>>> print (tulemus)
Kaksikud
>>> tulemus = bs_content.leidma ("isa")
>>> print (tulemus)
Puudub
>>> tulemus = bs_content.leidma ("ema")
>>> print (tulemus)
Puudub

Kui vaatate näidet, näete, et leidma meetod tagastab sildi, kui see sobib nimega, muidu tagastab Puudub. Kui vaatate seda lähemalt, näete, et see tagastab ainult ühe sildi.

Näiteks millal leidma („andmed”) helistati, tagastas see ainult esimese andmesildi, kuid ei tagastanud teisi.

GOTCHA: The leidma meetod tagastab ainult esimese sildi, mis vastab tema päringule.

Niisiis, kuidas leida ka teisi silte? See viib meid järgmise meetodini.

leidma kõik

The leidma kõik meetod on üsna sarnane meetodile leidma meetod. Ainus erinevus on see, et see tagastab loendi siltidest, mis vastavad tema päringule. Kui see ühtegi silti ei leia, tagastab see lihtsalt tühja loendi. Seega, leidma kõik tagastab alati loendi.

Siin on näide:

>>> tulemus = bs_content.find_all ("andmed")
>>> print (tulemus)
[Üks, Kaks]
>>> tulemus = bs_content.find_all ("laps")
>>> print (tulemus)
[Esiteks, Teiseks,
Kolmandaks

Üks
Kaks
Kaksikud

, Neljandaks]
>>> tulemus = bs_content.find_all ("isa")
>>> print (tulemus
[]
>>> tulemus = bs_content.find_all ("ema")
>>> print (tulemus)
[]

Nüüd, kui teate, kuidas seda kasutada leidma ja leidma kõik meetodite abil saate silte otsida kõikjal XML-dokumendis. Siiski saate oma otsinguid võimsamaks muuta.

Nii toimige järgmiselt

Mõnel sildil võib olla sama nimi, kuid erinevad atribuudid. Näiteks laps siltidel on a nimi atribuut ja erinevad väärtused. Nende põhjal saate teha konkreetseid otsinguid.

Vaadake seda:

>>> tulemus = bs_content.leidma ("laps", "nimi": "Roos")
>>> print (tulemus)
Teiseks
>>> tulemus = bs_content.find_all ("laps", "nimi": "Roos")
>>> print (tulemus)
[Teiseks]
>>> tulemus = bs_content.leidma ("laps", "nimi": "Jack")
>>> print (tulemus)
Esiteks
>>> tulemus = bs_content.find_all ("laps", "nimi": "Jack")
>>> print (tulemus)
[Esiteks]

Näete, et selle kasutamisel on midagi muud leidma ja leidma kõik meetodid siin: mõlemal on teine ​​parameeter.

Kui edastate sõnaraamatu teise parameetrina, kuvatakse leidma ja leidma kõik meetodid jätkavad nende otsimist siltide saamiseks, millel on atribuudid ja väärtused, mis sobivad pakutava võtmega: väärtuspaar.

Näiteks vaatamata leidma esimeses näites tagastas see teise laps silt (esimese laps silt), sest see on esimene päringule vastav silt. The leidma kõik silt järgib sama põhimõtet, välja arvatud see, et see tagastab kõik päringule vastavad sildid, mitte ainult esimese.

Siltide leidmine suhete järgi

Kuigi see pole nii populaarne kui siltide nimede järgi otsimine, saate silte otsida ka suhete järgi. Tegelikus mõttes on see siiski pigem navigeerimine kui otsimine.

XML-dokumentides on kolm võtmesuhet:

Ülaltoodud selgituse põhjal võite järeldada, et viitesilt on kõige olulisem tegur seoste järgi siltide otsimisel. Seetõttu otsime viitesildi ja jätkame artiklit.

Vaadake seda:

>>> kolmas_laps = bs_sisu.leid ("laps", "nimi": "Sinine luuderohi")
>>> print (kolmas_laps)

Kolmandaks

Üks
Kaks
Kaksikud

Ülaltoodud koodinäidise põhjal on ülejäänud selle jaotise viitesilt kolmas laps silt, salvestatud a kolmas_laps muutuv. Allpool olevatest alajaotistest näete, kuidas otsida silte, lähtudes nende vanema, õe ja venna suhetest viitesildiga.

Vanemate leidmine

Viitemärgendi vanemmärgendi leidmiseks kasutage seda vanem atribuut. Seda tehes tagastatakse nii vanemasilt kui ka selle all olevad sildid. See käitumine on üsna arusaadav, kuna lastesildid on osa vanemasildist.

Siin on näide:

>>> tulemus = kolmas laps.vanem
>>> print (tulemus)

Esiteks
Teiseks

Kolmandaks

Üks
Kaks
Kaksikud


Neljandaks

Laste leidmine

Viitemärgendi laste siltide leidmiseks kasutage seda lapsed atribuut. Seda tehes tagastatakse nii laste sildid kui ka nende all olevad alammärgendid. See käitumine on ka arusaadav, kuna ka lastemärgenditel on sageli oma lastemärgid.

Üks asi, mida peaksite märkima, on see, et lapsed atribuut tagastab laste sildid generaatorina. Nii et kui teil on vaja lastemärgendite loendit, peate generaatori teisendama loendiks.

Siin on näide:

>>> result = list (kolmas_laps.lapsed)
>>> print (tulemus)
['\ n Kolmas \ n',
Üks
Kaks
Kaksikud
, '\ n']

Kui vaatate ülaltoodud näidet lähemalt, märkate, et mõned loendis olevad väärtused ei ole sildid. See on asi, mida peate jälgima.

GOTCHA: The lapsed atribuut tagastab mitte ainult laste sildid, vaid tagastab ka viitesildi teksti.

Õdede-vendade leidmine

Viimane selles jaotises on siltide leidmine, mis on viitesildi õed-vennad. Iga viitemärgise jaoks võib enne ja pärast olla õe-venna sildid. The eelmised_sõbrad atribuut tagastab õde-venna sildid enne viitemärgendit ja Järgmised_sõbrad atribuut tagastab õe-venna sildid pärast seda.

Täpselt nagu lapsed atribuut, eelmised_sõbrad ja Järgmised_sõbrad atribuudid tagastavad generaatorid. Nii et peate muutma loendiks, kui vajate õdede-vendade loendit.

Vaadake seda:

>>> eelmised_sõnumid = nimekiri (kolmas_laps.eelmised_sõbrad)
>>> print (eelmised_õpikud)
['\ n', Teiseks, '\ n',
Esiteks, '\ n']
>>> next_siblings = list (kolmas_laps.Järgmised_sõbrad)
>>> print (järgmine_sõbrad)
['\ n', Neljandaks]
>>> print (eelmised_osad + järgmised_sõbrad)
['\ n', Teiseks, '\ n', Esiteks,
'\ n', '\ n', Neljandaks, '\ n']

Esimene näide näitab eelmisi õdesid-vendi, teine ​​näitab järgmisi õdesid-vendi; siis ühendatakse mõlemad tulemused, et luua kõigi võrdlusmärgendi õdede-vendade loend.

Siltidest väljavõtmine

XML-dokumentide sõelumisel seisneb suur töö õigete siltide leidmises. Kuid kui leiate need, võite ka nendest siltidest teatud teabe välja võtta ja seda see osa teile õpetab.

Näete, kuidas järgmist välja tõmmata:

Märgise atribuudi väärtuste väljavõtmine

Mõnikord võib teil olla põhjust sildis olevate atribuutide väärtuste väljavõtmiseks. Näiteks järgmises atribuudi-väärtuse sidumises: nimi = ”Roos”, võiksite väljavõtte „Roos.”

Selleks saate kasutada saada meetodil või pääsete juurde atribuudi nimele [] nagu register, täpselt nagu teeksite sõnastikuga töötades.

Siin on näide:

>>> tulemus = kolmas laps.hankima ("nimi")
>>> print (tulemus)
Sinine luuderohi
>>> tulemus = kolmas_laps ["nimi"]
>>> print (tulemus)
Sinine luuderohi

Siltteksti ekstraheerimine

Kui soovite juurde pääseda sildi tekstiväärtustele, saate kasutada nuppu teksti või stringid atribuut. Mõlemad tagastavad teksti märgendis ja isegi lapsed tagid. Siiski teksti atribuut tagastab need ühe stringina, liidetud; samal ajal kui stringid atribuut tagastab need generaatorina, mille saate teisendada loendiks.

Siin on näide:

>>> tulemus = kolmas laps.teksti
>>> print (tulemus)
'\ n Kolmas \ n \ nÜks \ nKaks \ nKaks kaks korda \ n \ n'
>>> result = list (kolmas_laps.stringid)
>>> print (tulemus)
['\ n Kolmas \ n', '\ n', 'Üks', '\ n', 'Kaks', '\ n', 'Kaksikud', '\ n', '\ n']

Sildi sisu väljavõtmine

Lisaks atribuudiväärtuste ja sildi teksti väljavõtmisele saate ka kogu sildi sisu välja tõmmata. Selleks saate kasutada sisu atribuut; see on natuke sarnane lapsed atribuudi ja annab samad tulemused. Kuid kuigi lapsed atribuut tagastab generaatori sisu atribuut tagastab loendi.

Siin on näide:

>>> tulemus = kolmas_laps.sisu
>>> print (tulemus)
['\ n Kolmas \ n',
Üks
Kaks
Kaksikud
, '\ n']

Ilus printimine

Siiani olete näinud mõnda olulist meetodit ja atribuuti, mis on kasulikud XML-dokumentide sõelumisel BeautifulSoupi abil. Kuid kui märkate, on siltide ekraanile printimisel neil mingi rühmitatud välimus. Kuigi välimus ei pruugi teie tootlikkust otseselt mõjutada, võib see aidata teil tõhusamalt sõeluda ja muuta töö vähem tüütuks.

Siin on näide tavalisel viisil printimisest:

>>> print (kolmas_laps)

Kolmandaks

Üks
Kaks
Kaksikud

Kuid saate selle välimust parandada, kasutades ilustama meetod. Helistage lihtsalt ilustama meetodit sildil printimise ajal ja saate midagi visuaalselt meeldivat.

Vaadake seda:

Järeldus

Dokumentide sõelumine on andmete hankimisel oluline aspekt. XML-dokumendid on üsna populaarsed ja loodetavasti on teil paremad võimalused nende vastuvõtmiseks ja soovitud andmete väljavõtmiseks.

Sellest artiklist saate nüüd:

Kui tunnete end üsna kaotsi ja olete BeautifulSoupi teegis üsna uus, võite tutvuda algajatele mõeldud BeautifulSoupi õpetusega.

Viis parimat ergonoomilist arvutihiiretoodet Linuxile
Kas pikaajaline arvuti kasutamine põhjustab valu randmes või sõrmedes?? Kas teil on liigeste jäikus ja peate pidevalt käsi suruma? Kas tunnete põletav...
How to Change Mouse and Touchpad Settings Using Xinput in Linux
Most Linux distributions ship with “libinput” library by default to handle input events on a system. It can process input events on both Wayland and X...
X-Mouse Button Control abil saate hiire nupud erinevates tarkvarades erinevalt ümber teha
Võib-olla vajate tööriista, mis võiks muuta teie hiire juhtimissüsteemi iga kasutatava rakendusega. Sel juhul võite proovida rakendust nimega X hiiren...