Bagaimana cara mengurai XML di Python

Komentar: 0

XML, atau eXtensible Markup Language, adalah bahasa markup serbaguna yang umumnya digunakan untuk mengkodekan dokumen dalam format yang dapat dibaca oleh manusia dan mesin. Format ini banyak digunakan untuk mentransfer data, membuat file konfigurasi, dan mengembangkan layanan web.

Dalam dokumen XML, elemen-elemen dienkapsulasi dalam tag yang menandakan awal dan akhir setiap elemen, memberikan struktur yang jelas untuk data.

Contoh XML:

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

Artikel ini membahas berbagai pustaka dan metode yang tersedia untuk mengurai XML di Python.

Pustaka Python untuk penguraian XML

Selanjutnya, kita akan mempelajari berbagai pustaka yang tersedia untuk ekstraksi data XML di Python, dan memandu Anda melalui proses instalasi untuk mengatur lingkungan Anda untuk bekerja dengan dokumen XML.

xml.etree.ElementTree

xml.etree.ElementTree adalah modul pustaka standar untuk mengurai dan membuat data XML. Modul ini menyediakan API yang efisien dan mudah untuk mengurai XML dari string dan file dan untuk membuat dokumen XML.

Contoh dasar:


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

Keluaran:

1.png

xml.dom.minidom

xml.dom.minidom adalah pustaka Python bawaan lain yang menyediakan representasi DOM (Document Object Model) dari XML. Pustaka ini memungkinkan manipulasi XML yang lebih rinci.

Contoh dasar:

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

Keluaran:

2.png

Penguraian XML BeautifulSoup

BeautifulSoup adalah pustaka yang populer untuk mem-parsing dokumen HTML dan XML. Ini sangat berguna untuk mengikis data web dan menangani XML yang tidak terbentuk dengan baik.

Contoh dasar:


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

Keluaran:

3.png

lxml library

lxml adalah sebuah pustaka yang kuat yang menggabungkan kemudahan penggunaan ElementTree dengan kecepatan dan fitur pustaka libxml2. Ini mendukung penguraian XML dan HTML.

Contoh dasar:

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

Keluaran:

4.png

Konversi XML ke kamus

Konversi XML ke kamus dapat berguna untuk memanipulasi dan memproses data XML dengan lebih fleksibel.


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)

Keluaran:

5.png

Konversi XML ke CSV

Konversi data dari format XML ke CSV menyederhanakan proses analisis dan penyimpanan data, membuatnya lebih mudah untuk diintegrasikan dengan aplikasi spreadsheet dan meningkatkan kemampuan untuk memvisualisasikan data secara efektif.

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

Menangani kesalahan XML

Ketika mem-parsing XML, menangani kesalahan sangat penting untuk memastikan bahwa kode Anda dapat mengelola data yang tidak diharapkan atau cacat dengan baik.

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

Mengurai XML dari sebuah URL

Berikut adalah contoh praktis menggunakan BeautifulSoup untuk mem-parsing data XML dari sebuah URL:

import requests  # Mengimpor pustaka permintaan untuk membuat permintaan HTTP
from bs4 import BeautifulSoup  # Mengimpor BeautifulSoup dari pustaka bs4 untuk mengurai XML

# Tentukan URL data XML
url = "https://httpbin.org/xml"

# Kirim permintaan GET ke URL
response = requests.get(url)

# Mengurai konten XML dari respons menggunakan BeautifulSoup
soup = BeautifulSoup(response.content, 'xml')

# Ulangi semua elemen 'slide' dalam XML
for slide in soup.find_all('slide'):
    # Temukan elemen 'judul' di dalam setiap 'slide' dan dapatkan teksnya
    title = slide.find('title').text
    # Mencetak teks judul
    print(f'Title: {title}')

Keluaran:

6 (1).png

Berbagai aplikasi menggunakan format data dasar XML mulai dari layanan web hingga file konfigurasi. Python memiliki banyak pustaka yang kuat untuk penguraian dan manipulasi data XML. Python memiliki pustaka yang komprehensif untuk penguraian data XML, baik ketika seseorang membutuhkan penggalian data dasar atau pemrosesan dokumen yang rumit. Kemampuan yang harus dimiliki oleh pengembang web Python adalah mengkodekan XML untuk pertukaran data dan penggalian web.

Komentar:

0 komentar