Krásna polievka

Ako analyzovať súbory XML pomocou Pythonovej verzie BeautifulSoup

Ako analyzovať súbory XML pomocou Pythonovej verzie BeautifulSoup
Údaje sú doslova všade, vo všetkých druhoch dokumentov. Ale nie všetko je užitočné, a preto je potrebné ho analyzovať, aby ste získali potrebné časti. Dokumenty XML sú jedným z takých dokumentov, ktoré obsahujú údaje. Sú veľmi podobné súborom HTML, pretože majú takmer rovnaký druh štruktúry. Preto ich budete musieť analyzovať, aby ste získali dôležité informácie, rovnako ako pri práci s HTML.

Analýza súborov XML má dva hlavné aspekty. Oni sú:

Budete musieť nájsť značku, ktorá obsahuje požadované informácie, a potom tieto informácie extrahovať. Pred koncom tohto článku sa dozviete, ako postupovať pri práci so súbormi XML.

Inštalácia

BeautifulSoup je jednou z najpoužívanejších knižníc, pokiaľ ide o scraping webu pomocou Pythonu. Pretože súbory XML sú podobné súborom HTML, je možné ich tiež analyzovať. Na syntaktickú analýzu súborov XML pomocou programu BeautifulSoup je však najlepšie použiť Python lxml parser.

Obidve knižnice môžete nainštalovať pomocou pip pomocou nasledujúceho príkazu:

pip nainštalujte bs4 lxml

Ak chcete potvrdiť, že obe knižnice sú úspešne nainštalované, môžete aktivovať interaktívny shell a pokúsiť sa importovať obe. Ak sa nezobrazí žiadna chyba, ste pripravení ísť so zvyškom článku.

Tu je príklad:

$ python
Python 3.7.4 (tagy / v3.7.4: e09359112e, 8. júla 2019, 20:34:20)
[MSC v.1916 64 bit (AMD64)] na systéme win32
Ďalšie informácie získate zadaním výrazu „help“, „copyright“, „credit“ alebo „license“.
>>> import bs4
>>> importovať lxml
>>>

Predtým, ako budete pokračovať, mali by ste vytvoriť súbor XML z útržku kódu nižšie. Je to celkom jednoduché a malo by to vyhovovať prípadom použitia, o ktorých sa dozviete vo zvyšku článku. Jednoducho skopírujte, vložte do svojho editora a uložte; meno ako vzorka.xml by malo stačiť.



Strom

najprv
Druhý

Po tretie

Jeden
Dva
Dvojicky


Po štvrté

Teraz vo vašom skripte Python; budete si musieť prečítať súbor XML ako normálny súbor a potom ho odovzdať do programu BeautifulSoup. Vo zvyšku tohto článku sa použije text bs_content premenná, takže je dôležité, aby ste urobili tento krok.

# Importovať BeautifulSoup
z bs4 importujte BeautifulSoup ako bs
obsah = []
# Prečítajte si súbor XML
s otvoreným ("vzorka.xml "," r ") ako súbor:
# Prečítajte si každý riadok v súbore, readlines () vráti zoznam riadkov
obsah = súbor.readlines ()
# Spojte riadky v zozname do reťazca
content = "".pripojiť sa (obsah)
bs_content = bs (obsah, "lxml")

Vzorka kódu vyššie sa importuje Krásna polievka, potom načíta súbor XML ako bežný súbor. Potom odovzdá obsah do importovaného Krásna polievka knižnica, ako aj analyzátor podľa výberu.

Všimnite si, že sa kód neimportuje lxml. Nemusí to tak byť Krásna polievka vyberie lxml analyzátor v dôsledku prechodu „Lxml“ do objektu.

Teraz môžete pokračovať zvyškom článku.

Hľadanie značiek

Jednou z najdôležitejších fáz syntaktickej analýzy súborov XML je hľadanie značiek. Pri použití aplikácie BeautifulSoup to môžete urobiť rôznymi spôsobmi; takže o niektorých z nich musíte vedieť, aby ste mali najlepšie nástroje na vhodnú situáciu.

Značky v dokumentoch XML nájdete takto:

Hľadanie značiek podľa mien

Pri hľadaní značiek podľa mien môžete použiť dve metódy BeautifulSoup. Prípady použitia sa však líšia; poďme sa na ne pozrieť.

Nájsť

Z vlastnej skúsenosti budete používať Nájsť metóda na vyhľadanie značiek v tomto článku častejšie ako iné metódy. Značka hľadania dostane názov značky, ktorú chcete získať, a vráti objekt značky BeautifulSoup, ak ju nájde; inak sa to vráti Žiadne.

Tu je príklad:

>>> výsledok = bs_content.nájsť („údaje“)
>>> tlač (výsledok)
Jeden
>>> výsledok = bs_content.nájsť („jedinečné“)
>>> tlač (výsledok)
Dvojicky
>>> výsledok = bs_content.nájsť („otec“)
>>> tlač (výsledok)
Žiadne
>>> výsledok = bs_content.nájsť („matka“)
>>> tlač (výsledok)
Žiadne

Ak sa pozriete na príklad, uvidíte, že Nájsť metóda vráti značku, ak sa zhoduje s menom, inak vráti hodnotu None. Ak sa na ňu však pozriete bližšie, uvidíte, že vráti iba jednu značku.

Napríklad kedy nájsť („údaje“) bol volaný, vrátil iba prvú dátovú značku, ale nevrátil ďalšie.

MÁM ŤA: The Nájsť metóda vráti iba prvú značku, ktorá sa zhoduje s jej dotazom.

Ako teda môžete nájsť ďalšie značky?? To nás vedie k ďalšej metóde.

nájsť_všetko

The nájsť_všetko metóda je dosť podobná Nájsť metóda. Rozdiel je iba v tom, že vráti zoznam značiek, ktoré sa zhodujú s jeho dotazom. Ak nenájde žiadnu značku, vráti prázdny zoznam. Preto, nájsť_všetko vždy vráti zoznam.

Tu je príklad:

>>> výsledok = bs_content.find_all ("data")
>>> tlač (výsledok)
[Jeden, Dva]
>>> výsledok = bs_content.find_all ("dieťa")
>>> tlač (výsledok)
[najprv, Druhý,
Po tretie

Jeden
Dva
Dvojicky

, Po štvrté]
>>> výsledok = bs_content.find_all ("otec")
>>> tlač (výsledok
[]
>>> výsledok = bs_content.find_all ("matka")
>>> tlač (výsledok)
[]

Teraz, keď viete, ako používať Nájsť a nájsť_všetko metódami, môžete vyhľadávať značky kdekoľvek v dokumente XML. Môžete však zvýšiť výkonnosť svojich vyhľadávaní.

Tu je postup:

Niektoré značky môžu mať rovnaký názov, ale odlišné atribúty. Napríklad dieťa značky majú a názov atribút a rôzne hodnoty. Na základe nich môžete vykonať konkrétne vyhľadávanie.

Pozrite sa na toto:

>>> výsledok = bs_content.find ("child", "name": "Rose")
>>> tlač (výsledok)
Druhý
>>> výsledok = bs_content.find_all ("child", "name": "Rose")
>>> tlač (výsledok)
[Druhý]
>>> výsledok = bs_content.find ("child", "name": "Jack")
>>> tlač (výsledok)
najprv
>>> výsledok = bs_content.find_all ("child", "name": "Jack")
>>> tlač (výsledok)
[najprv]

Uvidíte, že v používaní produktu je niečo iné Nájsť a nájsť_všetko metódy tu: obe majú druhý parameter.

Keď zadáte do slovníka ako druhý parameter, znak Nájsť a nájsť_všetko metódy ďalej hľadajú, aby získali značky, ktoré majú atribúty a hodnoty zodpovedajúce zadanému páru kľúč: hodnota.

Napríklad napriek použitiu Nájsť metóda v prvom príklade vrátila druhú dieťa značka (namiesto prvej dieťa značka), pretože to je prvá značka, ktorá sa zhoduje s dotazom. The nájsť_všetko Značka sa riadi rovnakým princípom, až na to, že vráti všetky značky, ktoré sa zhodujú s dotazom, nielen prvý.

Hľadanie značiek podľa vzťahov

Aj keď sú menej populárne ako vyhľadávanie podľa názvov značiek, môžete ich vyhľadávať aj podľa vzťahov. V skutočnom zmysle však ide skôr o navigáciu ako o vyhľadávanie.

V dokumentoch XML existujú tri kľúčové vzťahy:

Z vyššie uvedeného vysvetlenia vyvodíte, že referenčná značka je najdôležitejším faktorom pri hľadaní značiek podľa vzťahov. Preto hľadajme referenčnú značku a pokračujme v článku.

Pozri sa na toto:

>>> third_child = bs_content.find ("child", "name": "Blue Ivy")
>>> tlač (tretie_dieťa)

Po tretie

Jeden
Dva
Dvojicky

Z vyššie uvedenej ukážky kódu bude referenčná značka pre zvyšok tejto časti tretia dieťa značka, uložená v a tretie_dieťa premenná. V podsekciách nižšie uvidíte, ako vyhľadávať značky na základe vzťahu ich rodičov, súrodencov a detí s referenčnou značkou.

Hľadanie rodičov

Na vyhľadanie nadradenej značky referenčnej značky použijete rodič atribút. Týmto spôsobom sa vráti nadradená značka, ako aj značky pod ňou. Toto správanie je celkom pochopiteľné, pretože podradené značky sú súčasťou nadradenej značky.

Tu je príklad:

>>> výsledok = tretie_dieťa.rodič
>>> tlač (výsledok)

najprv
Druhý

Po tretie

Jeden
Dva
Dvojicky


Po štvrté

Hľadanie detí

Ak chcete nájsť podradené značky referenčnej značky, využijete deti atribút. Týmto spôsobom sa vrátia podradené značky a podpríznaky pod každou z nich. Toto správanie je tiež pochopiteľné, pretože podradené štítky majú často tiež svoje vlastné podradené štítky.

Jedna vec, ktorú by ste mali poznamenať, je, že deti atribút vráti podradené značky ako generátor. Takže ak potrebujete zoznam podradených značiek, budete musieť previesť generátor na zoznam.

Tu je príklad:

>>> výsledok = zoznam (tretie_dieťa.deti)
>>> tlač (výsledok)
['\ n Tretí \ n',
Jeden
Dva
Dvojicky
, '\ n']

Ak sa bližšie pozriete na vyššie uvedený príklad, všimnete si, že niektoré hodnoty v zozname nie sú značkami. Na to si treba dať pozor.

MÁM ŤA: The deti atribút nevracia iba podradené značky, ale vracia aj text v referenčnej značke.

Nájdenie súrodencov

Posledná v tejto časti je nájdenie značiek, ktoré sú súrodencami referenčnej značky. Pre každú referenčnú značku môžu byť pred ňou a za ňou súrodenecké značky. The predchadzajuci_rodenci atribút vráti súrodenecké značky pred referenčnou značkou a dalsi_rodenci atribút po ňom vráti súrodenecké značky.

Rovnako ako deti atribút, predchadzajuci_rodenci a dalsi_rodenci atribúty vrátia generátory. Ak teda potrebujete zoznam súrodencov, musíte ich previesť na zoznam.

Pozri sa na toto:

>>> previous_siblings = zoznam (tretie_dieťa.previous_sourcing)
>>> tlač (previous_sourcing)
['\ n', Druhý, „\ n“,
najprv, '\ n']
>>> next_siblings = zoznam (tretie_dieťa.next_siblings)
>>> tlač (ďalší_súrodenci)
['\ n', Po štvrté]
>>> tlač (predošlí_súrodenci + ďalší_súrodenci)
['\ n', Druhý, „\ n“, najprv,
'\ n', '\ n', Po štvrté, '\ n']

Prvý príklad zobrazuje predchádzajúcich súrodencov, druhý zobrazuje ďalších súrodencov; potom sa oba výsledky skombinujú a vygeneruje sa zoznam všetkých súrodencov pre referenčnú značku.

Extrahovanie zo značiek

Pri analýze dokumentov XML spočíva veľa práce v hľadaní správnych značiek. Keď ich však nájdete, možno budete chcieť z týchto značiek extrahovať určité informácie, a to vás naučí táto časť.

Uvidíte, ako extrahovať nasledujúce položky:

Extrahovanie hodnôt atribútov značiek

Niekedy môžete mať dôvod extrahovať hodnoty atribútov v značke. Napríklad v nasledujúcom párovaní atribút-hodnota: meno = ”ruža”, možno budete chcieť extrahovať „Rose.“

Ak to chcete urobiť, môžete využiť dostať metódou alebo prístupom k názvu atribútu pomocou [] ako index, rovnako ako pri práci so slovníkom.

Tu je príklad:

>>> výsledok = tretie_dieťa.get ("meno")
>>> tlač (výsledok)
Modrý brečtan
>>> result = third_child ["meno"]
>>> tlač (výsledok)
Modrý brečtan

Extrahuje sa text značky

Ak chcete získať prístup k textovým hodnotám značky, môžete použiť ikonu text alebo struny atribút. Obe vrátia text v značke a dokonca aj podradené značky. Avšak text atribút ich vráti ako jediný reťazec, zreťazený; kým struny atribút ich vráti ako generátor, ktorý môžete previesť na zoznam.

Tu je príklad:

>>> výsledok = tretie_dieťa.text
>>> tlač (výsledok)
'\ n Tretí \ n \ nJeden \ nDva \ nTwins \ n \ n'
>>> výsledok = zoznam (tretie_dieťa.struny)
>>> tlač (výsledok)
['\ n Tretí \ n', '\ n', 'Jeden', '\ n', 'Dva', '\ n', 'Dvojčatá', '\ n', '\ n']

Extrahuje sa obsah značky

Okrem extrahovania hodnôt atribútov a textu značky môžete tiež extrahovať všetok obsah značiek. Môžete to urobiť pomocou obsah atribút; je to trochu podobné deti atribút a prinesie rovnaké výsledky. Zatiaľ čo však deti atribút vráti generátor, obsah atribút vráti zoznam.

Tu je príklad:

>>> výsledok = tretie_dieťa.obsah
>>> tlač (výsledok)
['\ n Tretí \ n',
Jeden
Dva
Dvojicky
, '\ n']

Tlač krásna

Doteraz ste videli niekoľko dôležitých metód a atribútov, ktoré sú užitočné pri analýze dokumentov XML pomocou programu BeautifulSoup. Ak si však všimnete, že pri tlači štítkov na obrazovku majú nejaký zoskupený vzhľad. Aj keď vzhľad nemusí mať priamy vplyv na vašu produktivitu, môže vám pomôcť efektívnejšie analyzovať a zjednodušiť prácu.

Tu je príklad tlače normálnym spôsobom:

>>> tlač (tretie_dieťa)

Po tretie

Jeden
Dva
Dvojicky

Jeho vzhľad však môžete vylepšiť pomocou predstierať metóda. Stačí zavolať na predstierať metódu na štítku počas tlače a získate niečo vizuálne príjemné.

Pozri sa na toto:

Záver

Analýza dokumentov je dôležitým aspektom získavania údajov. Dokumenty XML sú veľmi populárne a dúfajme, že budete mať lepšie predpoklady na to, aby ste ich prevzali a extrahovali požadované údaje.

Z tohto článku teraz môžete:

Ak sa cítite dosť stratení a ste v knižnici BeautifulSoup celkom noví, môžete si pozrieť príručku BeautifulSoup pre začiatočníkov.

Pridajte gestá myši do systému Windows 10 pomocou týchto bezplatných nástrojov
V posledných rokoch sa počítače a operačné systémy veľmi vyvinuli. Boli časy, keď používatelia museli prechádzať správcami súborov pomocou príkazov. R...
Ovládajte a spravujte pohyb myši medzi viacerými monitormi v systéme Windows 10
Správca myši s duálnym displejom umožňuje ovládať a konfigurovať pohyb myši medzi viacerými monitormi spomalením jeho pohybu blízko hranice. Windows 1...
WinMouse vám umožňuje prispôsobiť a vylepšiť pohyb ukazovateľa myši na počítači so systémom Windows
Ak chcete vylepšiť predvolené funkcie kurzora myši, použite freeware WinMouse. Pridáva ďalšie funkcie, ktoré vám pomôžu vyťažiť zo svojej skromnej myš...