Az XML fájlok elemzésének két fő szempontja van. Ők:
- Címkék keresése
- Kivonás a címkékből
Meg kell találnia azt a címkét, amely a kívánt információt tárolja, majd kibontja ezt az információt. A cikk vége előtt megtudhatja, hogyan kell mindkettőt végrehajtani, ha XML-fájlokkal dolgozik.
Telepítés
A BeautifulSoup az egyik leggyakrabban használt könyvtár, amikor a webes lekérdezésről van szó a Python segítségével. Mivel az XML fájlok hasonlóak a HTML fájlokhoz, képes azok elemzésére is. Az XML fájlok elemzése a BeautifulSoup segítségével mégis a legjobb, ha a Python-t használja lxml elemző.
Mindkét könyvtárat telepítheti a csipog telepítőeszköz, az alábbi paranccsal:
pip install bs4 lxmlA két könyvtár sikeres telepítésének megerősítéséhez aktiválja az interaktív héjat, és megpróbálja importálni mindkettőt. Ha nem jelenik meg hiba, akkor készen áll a cikk többi részének folytatására.
Íme egy példa:
$ pythonPython 3.7.4 (címkék / v3.7.4: e09359112e, 2019. július 8., 20:34:20)
[MSC v.1916 64 bites (AMD64)] Win32 rendszeren
Írja be a "help", a "copyright", a "credit" vagy a "license" szót további információkért.
>>> import bs4
>>> importáljon lxml-t
>>>
Mielőtt továbblépne, létre kell hoznia egy XML fájlt az alábbi kódrészletből. Nagyon egyszerű, és meg kell felelnie azoknak a felhasználási eseteknek, amelyekről a cikk többi részében tájékozódhat. Egyszerűen másolja, illessze be a szerkesztőbe és mentse; olyan név, mint minta.xml elegendőnek kell lennie.
A fa
Harmadik
Egy
Kettő
Most a Python szkriptben; el kell olvasnia az XML fájlt, mint egy normál fájlt, majd át kell adnia a BeautifulSoup-ba. A cikk fennmaradó részében a bs_content változó, ezért fontos, hogy megtegye ezt a lépést.
# BeautifulSoup importálásaa bs4-ből importálja a BeautifulSoup-ot bs-ként
tartalom = []
# Olvassa el az XML fájlt
nyitott ("mintával.xml "," r ") fájlként:
# Olvassa el a fájl minden sorát, a readlines () sorok listáját adja vissza
tartalom = fájl.readlines ()
# Kombinálja a lista sorait egy karakterlánccá
content = "".csatlakozás (tartalom)
bs_content = bs (tartalom, "lxml")
Az import feletti kódminta BeautifulSoup, akkor az XML fájlt úgy olvassa el, mint egy szokásos fájlt. Ezt követően továbbítja a tartalmat az importáltba BeautifulSoup könyvtár, valamint a választott elemző.
Észre fogja venni, hogy a kód nem importálódik lxml. Nem kell így lennie BeautifulSoup választja a lxml értelmező az átadás eredményeként „Lxml” az objektumba.
Most folytathatja a cikk többi részét.
Címkék keresése
Az XML fájlok elemzésének egyik legfontosabb szakasza a címkék keresése. Különböző módon lehet ezt megtenni a BeautifulSoup használatakor; szóval tudnia kell néhányukról, hogy rendelkezzenek a legjobb eszközökkel a megfelelő helyzethez.
Címkéket találhat az XML dokumentumokban:
- Nevek
- Kapcsolatok
Címkék keresése név szerint
Két BeautifulSoup módszer használható, amikor a címkéket név szerint találja meg. A felhasználási esetek azonban eltérnek; vessünk egy pillantást rájuk.
megtalálja
Személyes tapasztalatok alapján használja a megtalálja módszer gyakrabban, mint az ebben a cikkben található többi módszer a címkék megtalálásához. A keresési címke megkapja a megszerezni kívánt címke nevét, és ha megtalálja, visszaadja a címke BeautifulSoup objektumát; másként visszatér Egyik sem.
Íme egy példa:
>>> eredmény = bs_content.keresés ("adatok")>>> nyomtatás (eredmény)
Egy
>>> eredmény = bs_content.megtalálás ("egyedi")
>>> nyomtatás (eredmény)
>>> eredmény = bs_content.megtalálni ("apa")
>>> nyomtatás (eredmény)
Egyik sem
>>> eredmény = bs_content.megtalálni ("anya")
>>> nyomtatás (eredmény)
Egyik sem
Ha megnézi a példát, látni fogja, hogy a megtalálja A method egy címkét ad vissza, ha megegyezik a névvel, különben a Nincs értéket adja vissza. Ha azonban jobban megnézi, akkor látni fogja, hogy csak egyetlen címkét ad vissza.
Például mikor keresés („adatok”) hívták, csak az első adattagot adta vissza, a többit viszont nem.
MEGVAGY: A megtalálja metódus csak az első címkét adja vissza, amely megfelel a lekérdezésének.
Tehát hogyan találhat meg más címkéket is? Ez a következő módszerhez vezet.
Találd meg mindet
A Találd meg mindet módszer meglehetősen hasonló a megtalálja módszer. Az egyetlen különbség az, hogy a lekérdezésének megfelelő címkék listáját adja vissza. Ha nem talál címkét, akkor egyszerűen üres listát ad vissza. Ennélfogva, Találd meg mindet mindig visszaad egy listát.
Íme egy példa:
>>> eredmény = bs_content.find_all ("adatok")>>> nyomtatás (eredmény)
[Egy, Kettő]
>>> eredmény = bs_content.find_all ("gyermek")
>>> nyomtatás (eredmény)
[
Harmadik
Egy
Kettő
>>> eredmény = bs_content.find_all ("apa")
>>> nyomtatás (eredmény
[]
>>> eredmény = bs_content.find_all ("anya")
>>> nyomtatás (eredmény)
[]
Most, hogy tudja, hogyan kell használni a megtalálja és Találd meg mindet módszerekkel bárhol kereshet címkéket az XML dokumentumban. A kereséseket azonban hatékonyabbá teheti.
Itt van, hogyan:
Egyes címkéknek lehet ugyanaz a neve, de eltérő attribútumokkal. Például a gyermek a címkéknek van egy név attribútum és különböző értékek. Ezek alapján konkrét kereséseket végezhet.
Nézd meg ezt:
>>> eredmény = bs_content.keresés ("gyermek", "név": "Rózsa")>>> nyomtatás (eredmény)
>>> eredmény = bs_content.find_all ("gyermek", "név": "Rózsa")
>>> nyomtatás (eredmény)
[
>>> eredmény = bs_content.keresés ("gyermek", "név": "Jack")
>>> nyomtatás (eredmény)
>>> eredmény = bs_content.find_all ("gyermek", "név": "Jack")
>>> nyomtatás (eredmény)
[
Látni fogja, hogy van valami más a megtalálja és Találd meg mindet módszerek itt: mindkettőjüknek van egy második paramétere.
Ha második paraméterként átad egy szótárat, akkor a megtalálja és Találd meg mindet módszerek tovább keresik azokat a címkéket, amelyek attribútumai és értékei megfelelnek a megadott kulcsnak: értékpár.
Például annak ellenére, hogy a megtalálja Az első példában a metódus a másodikat adta vissza gyermek tag (az első helyett gyermek tag), mert ez az első címke, amely megfelel a lekérdezésnek. A Találd meg mindet tag ugyanazt az elvet követi, kivéve, hogy nem csak az elsőt, hanem a lekérdezésnek megfelelő összes címkét adja vissza.
Címkék keresése kapcsolatok szerint
Bár kevésbé népszerű, mint a címkék nevei szerinti keresés, a címkék kapcsolatok alapján is kereshetők. Valódi értelemben azonban inkább a navigálásról van szó, mint a keresésről.
Az XML dokumentumokban három kulcsfontosságú kapcsolat van:
- Szülő: Az a címke, amelyben a referenciacímke létezik.
- Gyermekek: A referenciacímkében létező címkék.
- Testvérek: A referenciacímkével azonos szinten létező címkék.
A fenti magyarázatból arra következtethet, hogy a referenciacímke a legfontosabb tényező a címkék kapcsolatok szerinti keresésében. Ezért keressük meg a referencia címkét, és folytassuk a cikket.
Ezt nézd meg:
>>> harmadik_gyerek = bs_tartalom.lelet ("gyermek", "név": "Kék borostyán")>>> nyomtatás (harmadik gyermek)
Harmadik
Egy
Kettő
A fenti kódmintából a szakasz többi részének referenciacímkéje lesz a harmadik gyermek címke, a harmadik_gyerek változó. Az alábbi alszakaszokban megtudhatja, hogyan lehet címkéket keresni szülőjük, testvérük és gyermekeik viszonya alapján a referenciacímkével.
A szülők megkeresése
Egy referenciacímke szülőcímkéjének megtalálásához használja a szülő tulajdonság. Ezzel visszaküldi a szülőcímkét, valamint az alatta lévő címkéket. Ez a viselkedés egészen érthető, mivel a gyermekcímkék a szülőcímke részét képezik.
Íme egy példa:
>>> eredmény = harmadik_gyerek.szülő>>> nyomtatás (eredmény)
Harmadik
Egy
Kettő
Gyermekek keresése
A referenciacímke gyermekcímkéinek megtalálásához használja a gyermekek tulajdonság. Ezzel visszaküldi a gyermekcímkéket, valamint az egyes alcímkéket. Ez a viselkedés érthető is, mivel a gyermekcímkéknek gyakran saját gyermekcímkéik is vannak.
Egy dolgot érdemes megjegyezni, hogy a gyermekek attribútum generálja a gyermekcímkéket. Tehát, ha szüksége van a gyermekcímkék listájára, akkor a generátort listává kell konvertálnia.
Íme egy példa:
>>> eredmény = lista (harmadik_gyerek.gyermekek)>>> nyomtatás (eredmény)
['\ n Harmadik \ n',
Egy
Kettő
Ha jobban megnézi a fenti példát, akkor észreveszi, hogy a lista egyes értékei nem címkék. Erre figyelned kell.
MEGVAGY: A gyermekek attribútum nem csak a gyermek címkéket adja vissza, hanem a referencia címkében lévő szöveget is.
Testvérek megtalálása
Ebben a szakaszban az utolsó olyan címkék megtalálása, amelyek testvérek a referencia címkéhez. Minden referenciacímke előtt lehetnek testvércímkék előtte és utána. A előző_testvérek attribútum visszaadja a testvércímkéket a referenciacímke előtt, és a következő_testvérek attribútum a testvér címkéket adja vissza utána.
Akárcsak a gyermekek attribútum, a előző_testvérek és következő_testvérek az attribútumok visszaadják a generátorokat. Tehát listára kell konvertálnia, ha testvérek listájára van szüksége.
Ezt nézd meg:
>>> előző_képek = lista (harmadik_gyerek.előző_képek)>>> nyomtatás (előző_képek)
['\ n',
>>> next_siblings = list (harmadik_gyerek.következő_testvérek)
>>> nyomtatás (következő_képek)
['\ n',
>>> nyomtatás (előző_követések + következő_képek)
['\ n',
'\ n', '\ n',
Az első példa az előző testvéreket mutatja, a második a következő testvéreket mutatja be; akkor mindkét eredményt egyesítve létrehozzák az összes testvér listáját a referencia címkéhez.
Kivonás címkékből
Az XML-dokumentumok elemzése során sok munka a megfelelő címkék megtalálásában rejlik. Amikor azonban megtalálja őket, érdemes lehet bizonyos információkat kinyernie ezekből a címkékből, és ez az, amit ez a szakasz megtanít.
Meglátja, hogyan lehet kivonni a következőket:
- Címke attribútumértékek
- Címke szövege
- Címke tartalma
Címkeattribútum-értékek kibontása
Előfordulhat, hogy oka van az attribútumok értékeinek kibontására egy címkében. Például a következő attribútum-érték párosításban: név = „Rózsa”, érdemes kivonni „Rose.”
Ehhez használhatja a kap módszerrel, vagy az attribútum nevének elérésével [] mint egy index, ugyanúgy, mint egy szótárral dolgozva.
Íme egy példa:
>>> eredmény = harmadik gyermek.get ("név")>>> nyomtatás (eredmény)
Kék borostyán
>>> eredmény = harmadik_gyerek ["név"]
>>> nyomtatás (eredmény)
Kék borostyán
Címke szövegének kibontása
Ha hozzá akar férni egy címke szöveges értékeihez, használhatja a szöveg vagy húrok tulajdonság. Mindkettő visszaadja a szöveget egy címkében, és még a gyerekek is. Azonban a szöveg attribútum visszaadja őket egyetlen karaktersorozatként, összefűzve; amíg a húrok attribútum generátorként adja vissza őket, amelyet konvertálhat listává.
Íme egy példa:
>>> eredmény = harmadik gyermek.szöveg>>> nyomtatás (eredmény)
'\ n Harmadik \ n \ nEgy \ nKettő \ nKettő \ n \ n'
>>> eredmény = lista (harmadik_gyerek.húrok)
>>> nyomtatás (eredmény)
['\ n harmadik \ n', '\ n', 'egy', '\ n', 'kettő', '\ n', 'ikrek', '\ n', '\ n']
Címke tartalmának kibontása
Az attribútumértékek és a címkeszöveg kibontása mellett a címkék összes tartalmát is kivonhatja. Ehhez használhatja a tartalmát tulajdonság; kicsit hasonlít a gyermekek attribútummal, és ugyanazokat az eredményeket fogja eredményezni. Míg azonban a gyermekek attribútum egy generátort ad vissza, a tartalmát attribútum listát ad vissza.
Íme egy példa:
>>> eredmény = harmadik_gyerek.tartalmát>>> nyomtatás (eredmény)
['\ n Harmadik \ n',
Egy
Kettő
Gyönyörű nyomtatás
Eddig látott néhány fontos módszert és attribútumot, amelyek hasznosak az XML dokumentumok elemzéséhez a BeautifulSoup segítségével. De ha észreveszi, amikor a címkéket kinyomtatja a képernyőre, azok valamilyen fürtözött megjelenésűek. Bár a megjelenés nem befolyásolhatja közvetlenül a termelékenységet, segíthet hatékonyabban elemezni és kevésbé fárasztóvá tenni a munkát.
Íme egy példa a szokásos módon történő nyomtatásra:
>>> nyomtatás (harmadik gyermek)Harmadik
Egy
Kettő
Javíthatja azonban a megjelenését a szépít módszer. Egyszerűen hívja a szépít módszer a címkén nyomtatás közben, és valami vizuálisan kellemeset kap.
Ezt nézd meg:
Következtetés
A dokumentumok elemzése fontos szempont az adatok beszerzésében. Az XML dokumentumok meglehetősen népszerűek, és remélhetőleg jobban felkészültek arra, hogy felvegyék őket, és kivonják a kívánt adatokat.
Ebből a cikkből most:
- címkék keresése név vagy kapcsolat alapján
- adatok kibontása a címkékből
Ha elég elveszettnek érzi magát, és még nagyon új a BeautifulSoup könyvtárban, megnézheti a kezdőknek szóló BeautifulSoup oktatóanyagot.