BeautifulSoup

XML-fájlok elemzése a Python BeautifulSoup segítségével

XML-fájlok elemzése a Python BeautifulSoup segítségével
Az adatok szó szerint mindenhol megtalálhatók, mindenféle dokumentumban. De nem minden hasznos, ezért elemezni kell a szükséges alkatrészek megszerzéséhez. Az XML dokumentumok egyike ezeknek az adatoknak. Nagyon hasonlítanak a HTML fájlokhoz, mivel szinte azonos típusú felépítésűek. Ezért elemeznie kell őket, hogy létfontosságú információkhoz jusson, ugyanúgy, mint a HTML használatakor.

Az XML fájlok elemzésének két fő szempontja van. Ők:

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 lxml

A 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:

$ python
Python 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

Első
Második

Harmadik

Egy
Kettő
Ikrek


Negyedik

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ása
a 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:

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)
Ikrek
>>> 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)
[Első, Második,
Harmadik

Egy
Kettő
Ikrek

, Negyedik]
>>> 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)
Második
>>> eredmény = bs_content.find_all ("gyermek", "név": "Rózsa")
>>> nyomtatás (eredmény)
[Második]
>>> eredmény = bs_content.keresés ("gyermek", "név": "Jack")
>>> nyomtatás (eredmény)
Első
>>> eredmény = bs_content.find_all ("gyermek", "név": "Jack")
>>> nyomtatás (eredmény)
[Első]

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:

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ő
Ikrek

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)

Első
Második

Harmadik

Egy
Kettő
Ikrek


Negyedik

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ő
Ikrek
, '\ n']

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', Második, '\ n',
Első, '\ n']
>>> next_siblings = list (harmadik_gyerek.következő_testvérek)
>>> nyomtatás (következő_képek)
['\ n', Negyedik]
>>> nyomtatás (előző_követések + következő_képek)
['\ n', Második, '\ n', Első,
'\ n', '\ n', Negyedik, '\ 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í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ő
Ikrek
, '\ n']

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ő
Ikrek

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:

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.

Az AutoKey használata a Linux játékok automatizálásához
Az AutoKey egy asztali automatizáló segédprogram Linux és X11 rendszerekhez, Python 3, GTK és Qt programozással. A parancsfájlok és a MACRO funkcióina...
Az FPS-számláló megjelenítése a Linux-játékokban
A Linux játék komoly lendületet kapott, amikor a Valve 2012-ben bejelentette a Linux támogatását a Steam kliensnek és játékaiknak. Azóta sok AAA és in...
Sid Meier Civilization VI letöltése és lejátszása Linuxon
Bevezetés a játékba A Civilization 6 egy modern felvétel a Age of Empires játékok sorozatában bevezetett klasszikus koncepcióra. Az ötlet meglehetősen...