Come analizzare XML in Python

Commenti: 0

XML, o eXtensible Markup Language, è un linguaggio di markup versatile che viene comunemente utilizzato per codificare i documenti in un formato leggibile sia dall'uomo che dalla macchina. Questo formato è ampiamente utilizzato per trasferire dati, creare file di configurazione e sviluppare servizi web.

Nei documenti XML, gli elementi sono incapsulati all'interno di tag che indicano l'inizio e la fine di ciascun elemento, fornendo una struttura chiara per i dati.

Esempio di XML:

<data>
    <item>
        <name>Item 1</name>
        <price>10</price>
      </item>
    <item>
        <name>Item 2</name>
        <price>20</price>
    </item>
</data>

Questo articolo esplora le diverse librerie e i metodi disponibili per il parsing di XML in Python.

Librerie Python per il parsing di XML

In seguito, approfondiremo le varie librerie disponibili per l'estrazione di dati XML in Python e vi guideremo attraverso il processo di installazione per configurare il vostro ambiente per lavorare con i documenti XML.

xml.etree.ElementTree

xml.etree.ElementTree è un modulo di libreria standard per il parsing e la creazione di dati XML. Fornisce un'API efficiente e semplice per il parsing di XML da stringhe e file e per la creazione di documenti XML.

Esempio base:


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}')

Uscita:

1.png

xml.dom.minidom

xml.dom.minidom è un'altra libreria integrata in Python che fornisce una rappresentazione DOM (Document Object Model) di XML. Questa libreria consente una manipolazione più dettagliata dell'XML.

Esempio di base:

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}')

Uscita:

2.png

Animazione XML di BeautifulSoup

BeautifulSoup è una libreria popolare per l'analisi di documenti HTML e XML. È particolarmente utile per lo scraping di dati web e per la gestione di XML malformati.

Esempio di base:


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}')

Uscita:

3.png

Libreria lxml

lxml è una potente libreria che combina la facilità d'uso di ElementTree con la velocità e le caratteristiche della libreria libxml2. Supporta l'analisi di XML e HTML.

Esempio base:

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}')

Uscita:

4.png

Conversione da XML a dizionario

La conversione di XML in un dizionario può essere utile per manipolare ed elaborare i dati XML con maggiore flessibilità.


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)

Uscita:

5.png

Conversione da XML a CSV

La conversione dei dati dal formato XML a quello CSV semplifica il processo di analisi e archiviazione dei dati, facilitando l'integrazione con le applicazioni di foglio elettronico e migliorando la capacità di visualizzare i dati in modo efficace.

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])

Gestione degli errori XML

Quando si analizza XML, la gestione degli errori è fondamentale per garantire che il codice possa gestire con grazia dati imprevisti o malformati.

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}')

Paradossare XML da un URL

Ecco un esempio pratico di utilizzo di BeautifulSoup per analizzare i dati XML da un URL:

import requests  # Importare la libreria requests per fare richieste HTTP
from bs4 import BeautifulSoup  # Importazione di BeautifulSoup dalla libreria bs4 per l'analisi di XML

# Definire l'URL dei dati XML
url = "https://httpbin.org/xml"

# Inviare una richiesta GET all'URL
response = requests.get(url)

# Analizzare il contenuto XML della risposta utilizzando BeautifulSoup
soup = BeautifulSoup(response.content, 'xml')

# Eseguire il loop di tutti gli elementi "slide" nell'XML
for slide in soup.find_all('slide'):
    # Trovare l'elemento "titolo" all'interno di ogni "diapositiva" e ottenere il suo testo
    title = slide.find('title').text
    # Stampa il testo del titolo
    print(f'Title: {title}')

Uscita:

6 (1).png

Diverse applicazioni utilizzano il formato di dati elementare XML, dai servizi web ai file di configurazione. Python dispone di numerose e robuste librerie per l'analisi e la manipolazione dei dati XML. Python dispone di una libreria completa per il parsing dei dati XML, sia che si abbia bisogno di un data mining di base che di un'elaborazione elaborata dei documenti. L'abilità degli sviluppatori web Python è quella di codificare XML sia per l'interscambio di dati che per il web scraping.

Commenti:

0 Commenti