Krásná polévka

Jak analyzovat soubory XML pomocí Python's BeautifulSoup

Jak analyzovat soubory XML pomocí Python's BeautifulSoup
Data jsou doslova všude, ve všech druzích dokumentů. Ale ne všechno je užitečné, a proto je potřeba jej analyzovat, abychom získali potřebné části. Dokumenty XML jsou jedním z takových dokumentů, které obsahují data. Jsou velmi podobné souborům HTML, protože mají téměř stejný druh struktury. Proto je budete muset analyzovat, abyste získali důležité informace, stejně jako při práci s HTML.

Při analýze souborů XML existují dva hlavní aspekty. Oni jsou:

Budete muset najít značku, která obsahuje požadované informace, a poté tyto informace extrahovat. Před koncem tohoto článku se naučíte, jak to udělat při práci se soubory XML.

Instalace

BeautifulSoup je jednou z nejpoužívanějších knihoven, pokud jde o škrábání webu pomocí Pythonu. Vzhledem k tomu, že soubory XML jsou podobné souborům HTML, je také schopen je analyzovat. Chcete-li však analyzovat soubory XML pomocí programu BeautifulSoup, je nejlepší použít Python lxml analyzátor.

Obě knihovny můžete nainstalovat pomocí pip instalační nástroj pomocí níže uvedeného příkazu:

pip install bs4 lxml

Chcete-li potvrdit, že jsou obě knihovny úspěšně nainstalovány, můžete aktivovat interaktivní prostředí a zkusit importovat obě. Pokud se neobjeví žádná chyba, jste připraveni jít se zbytkem článku.

Zde je příklad:

$ python
Python 3.7.4 (tagy / v3.7.4: e09359112e, 8. července 2019, 20:34:20)
[MSC v.1916 64 bitů (AMD64)] na systému win32
Další informace získáte zadáním „help“, „copyright“, „credit“ nebo „license“.
>>> import bs4
>>> import lxml
>>>

Než budete pokračovat, měli byste vytvořit soubor XML z níže uvedeného fragmentu kódu. Je to docela jednoduché a mělo by vyhovovat případům použití, o kterých se dozvíte ve zbytku článku. Jednoduše zkopírujte, vložte do svého editoru a uložte; jméno jako vzorek.xml by mělo stačit.



Strom

První
Druhý

Třetí

Jeden
Dva
Dvojčata


Čtvrtý

Nyní ve vašem skriptu Pythonu; budete si muset přečíst soubor XML jako normální soubor a poté jej předat do aplikace BeautifulSoup. Zbytek tohoto článku využije bs_content proměnná, takže je důležité, abyste tento krok provedli.

# Importujte BeautifulSoup
z bs4 importujte BeautifulSoup jako bs
obsah = []
# Přečtěte si soubor XML
s otevřeným ("ukázka.xml "," r ") jako soubor:
# Přečtěte si každý řádek v souboru, readlines () vrátí seznam řádků
obsah = soubor.readlines ()
# Spojte řádky v seznamu do řetězce
content = "".připojit se (obsah)
bs_content = bs (obsah, "lxml")

Ukázka kódu výše se importuje Krásná polévka, poté načte soubor XML jako běžný soubor. Poté předá obsah do importovaného Krásná polévka knihovnu a analyzátor podle výběru.

Všimnete si, že se kód neimportuje lxml. Nemusí to tak být Krásná polévka zvolí lxml analyzátor v důsledku předání „Lxml“ do objektu.

Nyní můžete pokračovat se zbytkem článku.

Hledání značek

Jednou z nejdůležitějších fází analýzy souborů XML je vyhledávání značek. Existuje několik způsobů, jak toho dosáhnout, když používáte BeautifulSoup; takže potřebujete vědět o hrstce z nich, abyste měli nejlepší nástroje pro příslušnou situaci.

Značky v dokumentech XML najdete takto:

Hledání značek podle jmen

Při hledání značek podle jmen můžete použít dvě metody BeautifulSoup. Případy použití se však liší; pojďme se na ně podívat.

nalézt

Z osobní zkušenosti budete používat nalézt metoda častěji než jiné metody pro hledání značek v tomto článku. Značka Najít obdrží název značky, kterou chcete získat, a vrátí objekt BeautifulSoup značky, pokud ji najde; jinak se vrátí Žádný.

Zde je příklad:

>>> result = bs_content.find ("data")
>>> tisk (výsledek)
Jeden
>>> result = bs_content.najít („jedinečné“)
>>> tisk (výsledek)
Dvojčata
>>> result = bs_content.najít („otec“)
>>> tisk (výsledek)
Žádný
>>> result = bs_content.najít („matka“)
>>> tisk (výsledek)
Žádný

Pokud se podíváte na příklad, uvidíte, že nalézt metoda vrátí značku, pokud odpovídá názvu, jinak vrátí None. Pokud se však na to podíváte blíže, uvidíte, že vrátí pouze jednu značku.

Například když najít („data“) byl volán, vrátil pouze první datovou značku, ale nevrátil ostatní.

MÁM TĚ: The nalézt metoda vrátí pouze první značku, která odpovídá jejímu dotazu.

Jak tedy můžete najít další značky?? To nás vede k další metodě.

najít_všechno

The najít_všechno metoda je docela podobná metodě nalézt metoda. Jediný rozdíl je v tom, že vrací seznam značek, které odpovídají jeho dotazu. Pokud nenajde žádnou značku, jednoduše vrátí prázdný seznam. Proto, najít_všechno vždy vrátí seznam.

Zde je příklad:

>>> result = bs_content.find_all ("data")
>>> tisk (výsledek)
[Jeden, Dva]
>>> result = bs_content.find_all ("dítě")
>>> tisk (výsledek)
[První, Druhý,
Třetí

Jeden
Dva
Dvojčata

, Čtvrtý]
>>> result = bs_content.find_all ("otec")
>>> tisk (výsledek
[]
>>> result = bs_content.find_all ("matka")
>>> tisk (výsledek)
[]

Nyní, když víte, jak používat nalézt a najít_všechno metodami, můžete vyhledávat značky kdekoli v dokumentu XML. Můžete však své vyhledávání zintenzivnit.

Zde je postup:

Některé značky mohou mít stejný název, ale odlišné atributy. Například dítě značky mají a název atribut a různé hodnoty. Na základě nich můžete provádět konkrétní vyhledávání.

Podívejte se na toto:

>>> result = bs_content.find ("child", "name": "Rose")
>>> tisk (výsledek)
Druhý
>>> result = bs_content.find_all ("child", "name": "Rose")
>>> tisk (výsledek)
[Druhý]
>>> result = bs_content.find ("child", "name": "Jack")
>>> tisk (výsledek)
První
>>> result = bs_content.find_all ("child", "name": "Jack")
>>> tisk (výsledek)
[První]

Uvidíte, že v používání aplikace je něco jiného nalézt a najít_všechno metody zde: oba mají druhý parametr.

Když jako druhý parametr předáte slovník, zobrazí se nalézt a najít_všechno metody dále hledají, aby získaly značky, které mají atributy a hodnoty, které odpovídají zadanému páru klíč: hodnota.

Například přes použití nalézt metoda v prvním příkladu vrátila druhou dítě značka (místo první dítě tag), protože to je první tag, který odpovídá dotazu. The najít_všechno tag se řídí stejným principem, až na to, že vrací všechny tagy, které odpovídají dotazu, nejen první.

Hledání značek podle vztahů

I když jsou méně populární než vyhledávání podle názvů značek, můžete je vyhledávat také podle vztahů. Ve skutečném smyslu však jde spíše o navigaci než o hledání.

V dokumentech XML existují tři klíčové vztahy:

Z výše uvedeného vysvětlení můžete odvodit, že referenční značka je nejdůležitějším faktorem při hledání značek podle vztahů. Podívejme se tedy na referenční značku a pokračujme v článku.

Podívej se na to:

>>> third_child = bs_content.find ("child", "name": "Blue Ivy")
>>> tisk (third_child)

Třetí

Jeden
Dva
Dvojčata

Z výše uvedeného ukázky kódu bude referenční značka pro zbytek této části třetí dítě značka uložená v třetí_dítě proměnná. V podsekcích níže uvidíte, jak vyhledávat značky na základě vztahu rodičů, sourozenců a dětí s referenční značkou.

Hledání rodičů

Chcete-li najít nadřazenou značku referenční značky, použijete rodič atribut. Tímto způsobem vracíte nadřazenou značku i značky pod ní. Toto chování je zcela pochopitelné, protože podřízené značky jsou součástí nadřazené značky.

Zde je příklad:

>>> result = third_child.rodič
>>> tisk (výsledek)

První
Druhý

Třetí

Jeden
Dva
Dvojčata


Čtvrtý

Hledání dětí

Chcete-li najít podřízené značky referenční značky, využijete děti atribut. Tímto způsobem vracíte podřízené značky i podřízené značky pod každou z nich. Toto chování je také pochopitelné, protože podřízené značky mají často také své vlastní podřízené značky.

Jedna věc, kterou byste měli poznamenat, je, že děti atribut vrátí podřízené značky jako generátor. Takže pokud potřebujete seznam podřízených značek, budete muset převést generátor na seznam.

Zde je příklad:

>>> result = list (third_child.děti)
>>> tisk (výsledek)
['\ n Třetí \ n',
Jeden
Dva
Dvojčata
, '\ n']

Pokud se blíže podíváte na výše uvedený příklad, zjistíte, že některé hodnoty v seznamu nejsou značky. To je něco, na co si musíte dát pozor.

MÁM TĚ: The děti Atribut nejen vrací podřízené značky, ale také vrací text v referenční značce.

Hledání sourozenců

Poslední v této části je hledání značek, které jsou sourozenci referenční značky. U každé referenční značky mohou existovat sourozenecké značky před a po ní. The předchozí_ sourozenci atribut vrátí sourozenecké tagy před referenční tag a další_ sourozenci Atribut po něm vrátí sourozenecké značky.

Stejně jako děti atribut, předchozí_ sourozenci a další_ sourozenci atributy vrátí generátory. Pokud tedy potřebujete seznam sourozenců, musíte jej převést na seznam.

Podívej se na to:

>>> previous_siblings = seznam (třetí_ dítě).previous_sourozenci)
>>> tisk (předchozí_ sourozenci)
['\ n', Druhý, '\ n',
První, '\ n']
>>> next_siblings = list (third_child.next_siblings)
>>> tisk (next_siblings)
['\ n', Čtvrtý]
>>> tisk (předchozí_sourozenci + další_sourozenci)
['\ n', Druhý, '\ n', První,
'\ n', '\ n', Čtvrtý, '\ n']

První příklad ukazuje předchozí sourozence, druhý ukazuje další sourozence; pak se oba výsledky spojí a vygenerují seznam všech sourozenců pro referenční značku.

Extrahování ze značek

Při analýze dokumentů XML spočívá spousta práce při hledání správných značek. Když je však najdete, můžete z těchto značek také extrahovat určité informace, a proto vás tato část naučí.

Uvidíte, jak extrahovat následující:

Extrakce hodnot atributů značek

Někdy můžete mít důvod extrahovat hodnoty atributů ve značce. Například v následujícím párování atribut-hodnota: name = ”Rose”, možná budete chtít extrahovat „Rose.“

K tomu můžete použít dostat metoda nebo přístup k názvu atributu pomocí [] jako index, stejně jako při práci se slovníkem.

Zde je příklad:

>>> result = third_child.get ("jméno")
>>> tisk (výsledek)
Modrý břečťan
>>> result = third_child ["name"]
>>> tisk (výsledek)
Modrý břečťan

Extrahování textu značky

Chcete-li získat přístup k textovým hodnotám značky, můžete použít text nebo struny atribut. Oba vrátí text ve značce a dokonce i podřízené značky. Nicméně text atribut je vrátí jako jediný řetězec, zřetězený; zatímco struny atribut je vrátí jako generátor, který můžete převést na seznam.

Zde je příklad:

>>> result = third_child.text
>>> tisk (výsledek)
'\ n Třetí \ n \ nJeden \ nDvě \ nTwins \ n \ n'
>>> result = list (third_child.struny)
>>> tisk (výsledek)
['\ n Třetí \ n', '\ n', 'Jeden', '\ n', 'Dva', '\ n', 'Dvojčata', '\ n', '\ n']

Extrahování obsahu značky

Kromě extrahování hodnot atributů a textu značky můžete také extrahovat veškerý obsah značek. K tomu můžete použít obsah atribut; je to trochu podobné děti atribut a přinese stejné výsledky. Zatímco však děti atribut vrací generátor, obsah atribut vrací seznam.

Zde je příklad:

>>> result = third_child.obsah
>>> tisk (výsledek)
['\ n Třetí \ n',
Jeden
Dva
Dvojčata
, '\ n']

Krásný tisk

Zatím jste viděli několik důležitých metod a atributů, které jsou užitečné při analýze dokumentů XML pomocí BeautifulSoup. Ale pokud si všimnete, že když tisknete tagy na obrazovku, mají nějaký seskupený vzhled. I když vzhled nemusí mít přímý dopad na vaši produktivitu, může vám pomoci analyzovat efektivněji a učinit práci méně zdlouhavou.

Zde je příklad tisku běžným způsobem:

>>> tisk (third_child)

Třetí

Jeden
Dva
Dvojčata

Jeho vzhled však můžete vylepšit pomocí předstírat metoda. Jednoduše zavolejte na předstírat metoda na štítku při tisku a získáte něco vizuálně příjemného.

Podívej se na to:

Závěr

Analýza dokumentů je důležitým aspektem získávání dat. Dokumenty XML jsou velmi populární a doufejme, že jste lépe připraveni je převzít a extrahovat požadovaná data.

Z tohoto článku nyní můžete:

Pokud se cítíte docela ztraceni a jste v knihovně BeautifulSoup docela noví, můžete se podívat na tutoriál BeautifulSoup pro začátečníky.

Kurzor při psaní v systému Windows 10 skáče nebo se pohybuje náhodně
Pokud zjistíte, že kurzor myši skáče nebo se pohybuje sám, automaticky, náhodně při psaní v notebooku nebo počítači se systémem Windows, pak vám někte...
Jak obrátit směr posouvání myši a touchpadu ve Windows 10
Myš a Touchpadnejenže usnadňují výpočet, ale jsou efektivnější a méně časově náročné. Nemůžeme si představit život bez těchto zařízení, ale přesto je ...
Jak změnit velikost, barvu a schéma kurzoru myši a kurzoru v systému Windows 10
Ukazatel myši a kurzor ve Windows 10 jsou velmi důležité aspekty operačního systému. To lze říci i pro jiné operační systémy, takže ve skutečnosti nej...