XML veya eXtensible Markup Language, belgeleri hem insan tarafından okunabilir hem de makine tarafından okunabilir bir formatta kodlamak için yaygın olarak kullanılan çok yönlü bir işaretleme dilidir. Bu format, verilerin aktarılması, yapılandırma dosyalarının oluşturulması ve web hizmetlerinin geliştirilmesi için yaygın olarak kullanılmaktadır.
XML belgelerinde öğeler, her öğenin başlangıcını ve sonunu belirten etiketler içinde kapsüllenir ve veriler için net bir yapı sağlar.
XML örneği:
<data>
<item>
<name>Item 1</name>
<price>10</price>
</item>
<item>
<name>Item 2</name>
<price>20</price>
</item>
</data>
Bu makale, Python'da XML ayrıştırmak için mevcut olan farklı kütüphaneleri ve yöntemleri araştırmaktadır.
Daha sonra, Python'da XML veri çıkarımı için mevcut olan çeşitli kütüphaneleri inceleyeceğiz ve XML belgeleriyle çalışmak üzere ortamınızı kurmak için kurulum sürecinde size rehberlik edeceğiz.
xml.etree.ElementTree, XML verilerini ayrıştırmak ve oluşturmak için kullanılan standart bir kütüphane modülüdür. XML'i dizelerden ve dosyalardan ayrıştırmak ve XML belgeleri oluşturmak için verimli ve basit bir API sağlar.
Temel örnek:
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}')
Çıktı:
xml.dom.minidom, XML'in DOM (Belge Nesne Modeli) gösterimini sağlayan başka bir yerleşik Python kütüphanesidir. Bu kütüphane daha ayrıntılı XML manipülasyonuna izin verir.
Temel örnek:
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}')
Çıktı:
BeautifulSoup, HTML ve XML belgelerini ayrıştırmak için kullanılan popüler bir kütüphanedir. Özellikle web verilerini kazımak ve kötü biçimlendirilmiş XML'i işlemek için kullanışlıdır.
Temel örnek:
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}')
Çıktı:
lxml, ElementTree'nin kullanım kolaylığını libxml2 kütüphanesinin hızı ve özellikleriyle birleştiren güçlü bir kütüphanedir. Hem XML hem de HTML ayrıştırmayı destekler.
Temel örnek:
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}')
Çıktı:
XML'i bir sözlüğe dönüştürmek, XML verilerini daha esnek bir şekilde işlemek ve işlemek için yararlı olabilir.
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)
Çıktı:
Verilerin XML'den CSV formatına dönüştürülmesi, verilerin analiz edilmesi ve depolanması sürecini basitleştirir, elektronik tablo uygulamalarıyla entegrasyonu kolaylaştırır ve verileri etkili bir şekilde görselleştirme becerisini geliştirir.
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])
XML'i ayrıştırırken, kodunuzun beklenmedik veya hatalı biçimlendirilmiş verileri zarif bir şekilde yönetebilmesini sağlamak için hataları ele almak çok önemlidir.
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}')
İşte bir URL'den XML verilerini ayrıştırmak için BeautifulSoup kullanan pratik bir örnek:
import requests # HTTP istekleri yapmak için requests kütüphanesini içe aktarma
from bs4 import BeautifulSoup # XML ayrıştırmak için BeautifulSoup'u bs4 kütüphanesinden içe aktarma
# XML verilerinin URL'sini tanımlayın
url = "https://httpbin.org/xml"
# URL'ye bir GET isteği gönderin
response = requests.get(url)
# BeautifulSoup kullanarak yanıtın XML içeriğini ayrıştırma
soup = BeautifulSoup(response.content, 'xml')
# XML'deki tüm 'slide' öğeleri arasında döngü
for slide in soup.find_all('slide'):
# Her bir 'slayt' içindeki 'başlık' öğesini bulun ve metnini alın
title = slide.find('title').text
# Başlık metnini yazdırma
print(f'Title: {title}')
Çıktı:
Web hizmetlerinden yapılandırma dosyalarına kadar çeşitli uygulamalar temel veri formatı XML'i kullanır. Python, XML veri ayrıştırma ve manipülasyon için çok sayıda sağlam kütüphaneye sahiptir. Python, ister temel veri madenciliği ister ayrıntılı belge işleme gereksinimi olsun, XML veri ayrıştırma için kapsamlı bir kütüphaneye sahiptir. Python web geliştiricilerinin sahip olması gereken yetenek, hem veri alışverişi hem de web kazıma için XML kodlamaktır.
Yorumlar: 0