XML, czyli eXtensible Markup Language, to wszechstronny język znaczników, który jest powszechnie używany do kodowania dokumentów w formacie czytelnym zarówno dla człowieka, jak i dla maszyn. Format ten jest szeroko wykorzystywany do przesyłania danych, tworzenia plików konfiguracyjnych i opracowywania usług internetowych.
W dokumentach XML elementy są zamknięte w znacznikach, które oznaczają początek i koniec każdego elementu, zapewniając przejrzystą strukturę danych.
Przykład XML:
<data>
<item>
<name>Item 1</name>
<price>10</price>
</item>
<item>
<name>Item 2</name>
<price>20</price>
</item>
</data>
W tym artykule omówiono różne biblioteki i metody dostępne do analizowania XML w Pythonie.
Następnie zagłębimy się w różne biblioteki dostępne do ekstrakcji danych XML w Pythonie i przeprowadzimy Cię przez proces instalacji, aby skonfigurować środowisko do pracy z dokumentami XML.
xml.etree.ElementTree to standardowy moduł biblioteczny do analizowania i tworzenia danych XML. Zapewnia wydajny i prosty interfejs API do analizowania XML z łańcuchów i plików oraz do tworzenia dokumentów XML.
Podstawowy przykład:
import xml.etree.ElementTree as ET
xml_data = """
<data>
<item>
<name>Item 1</name>
<price>10</price>
</item>
<item>
<name>Item 2</name>
<price>20</price>
</item>
</data>
"""
root = ET.fromstring(xml_data)
for item in root.findall('item'):
name = item.find('name').text
price = item.find('price').text
print(f'Name: {name}, Price: {price}')
Wyjście:
xml.dom.minidom to kolejna wbudowana biblioteka Pythona, która zapewnia reprezentację DOM (Document Object Model) XML. Biblioteka ta pozwala na bardziej szczegółową manipulację XML.
Podstawowy przykład:
from xml.dom.minidom import parseString
xml_data = """
<data>
<item>
<name>Item 1</name>
<price>10</price>
</item>
<item>
<name>Item 2</name>
<price>20</price>
</item>
</data>
"""
dom = parseString(xml_data)
items = dom.getElementsByTagName('item')
for item in items:
name = item.getElementsByTagName('name')[0].firstChild.data
price = item.getElementsByTagName('price')[0].firstChild.data
print(f'Name: {name}, Price: {price}')
Wyjście:
BeautifulSoup to popularna biblioteka do parsowania dokumentów HTML i XML. Jest szczególnie przydatna do skrobania danych internetowych i obsługi źle sformatowanego XML.
Podstawowy przykład:
from bs4 import BeautifulSoup
xml_data = """
<data>
<item>
<name>Item 1</name>
<price>10</price>
</item>
<item>
<name>Item 2</name>
<price>20</price>
</item>
</data>
"""
soup = BeautifulSoup(xml_data, 'xml')
items = soup.find_all('item')
for item in items:
name = item.find('name').text
price = item.find('price').text
print(f'Name: {name}, Price: {price}')
Wyjście:
lxml to potężna biblioteka, która łączy w sobie łatwość użycia ElementTree z szybkością i funkcjami biblioteki libxml2. Obsługuje zarówno parsowanie XML jak i HTML.
Podstawowy przykład:
from lxml import etree
xml_data = """
<data>
<item>
<name>Item 1</name>
<price>10</price>
</item>
<item>
<name>Item 2</name>
<price>20</price>
</item>
</data>
"""
root = etree.fromstring(xml_data)
items = root.findall('item')
for item in items:
name = item.find('name').text
price = item.find('price').text
print(f'Name: {name}, Price: {price}')
Wyjście:
Konwersja XML do słownika może być przydatna do manipulowania i przetwarzania danych XML z większą elastycznością.
import xml.etree.ElementTree as ET
def xml_to_dict(element):
if len(element) == 0:
return element.text
return {child.tag: xml_to_dict(child) for child in element}
xml_data = """
<data>
<item>
<name>Item 1</name>
<price>10</price>
</item>
<item>
<name>Item 2</name>
<price>20</price>
</item>
</data>
"""
root = ET.fromstring(xml_data)
data_dict = xml_to_dict(root)
print(data_dict)
Wyjście:
Konwersja danych z formatu XML do formatu CSV upraszcza proces analizy i przechowywania danych, ułatwiając integrację z aplikacjami arkusza kalkulacyjnego i zwiększając możliwości efektywnej wizualizacji danych.
import csv
import xml.etree.ElementTree as ET
xml_data = """
<data>
<item>
<name>Item 1</name>
<price>10</price>
</item>
<item>
<name>Item 2</name>
<price>20</price>
</item>
</data>
"""
root = ET.fromstring(xml_data)
with open('output.csv', 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(['Name', 'Price'])
for item in root.findall('item'):
name = item.find('name').text
price = item.find('price').text
writer.writerow([name, price])
Podczas analizowania XML, obsługa błędów ma kluczowe znaczenie dla zapewnienia, że kod może z wdziękiem zarządzać nieoczekiwanymi lub zniekształconymi danymi.
import xml.etree.ElementTree as ET
xml_data = """
<data>
<item>
<name>Item 1</name>
<price>10</price>
</item>
<item>
<name>Item 2</name>
<price>20</price>
</item>
</data>
"""
try:
root = ET.fromstring(xml_data)
except ET.ParseError as e:
print(f'Error parsing XML: {e}')
Oto praktyczny przykład użycia BeautifulSoup do parsowania danych XML z adresu URL:
import requests # Importowanie biblioteki żądań w celu wykonywania żądań HTTP
from bs4 import BeautifulSoup # Importowanie BeautifulSoup z biblioteki bs4 w celu parsowania XML
# Zdefiniuj adres URL danych XML
url = "https://httpbin.org/xml"
# Wyślij żądanie GET do adresu URL
response = requests.get(url)
# Parsowanie zawartości XML odpowiedzi przy użyciu BeautifulSoup
soup = BeautifulSoup(response.content, 'xml')
# Pętla przez wszystkie elementy "slide" w XML
for slide in soup.find_all('slide'):
# Znajdź element "title" w każdym slajdzie i pobierz jego tekst.
title = slide.find('title').text
# Drukuj tekst tytułu
print(f'Title: {title}')
Wyjście:
Różne aplikacje wykorzystują elementarny format danych XML, od usług internetowych po pliki konfiguracyjne. Python zawiera wiele solidnych bibliotek do analizowania danych XML, jak również do manipulacji nimi. Python posiada wszechstronną bibliotekę do analizowania danych XML, niezależnie od tego, czy potrzebna jest podstawowa eksploracja danych, czy skomplikowane przetwarzanie dokumentów. Niezbędną umiejętnością twórców stron internetowych w Pythonie jest kodowanie XML zarówno w celu wymiany danych, jak i skrobania stron internetowych.
Komentarze: 0