sup cantik

Cara Mengurai File XML Menggunakan BeautifulSoup Python

Cara Mengurai File XML Menggunakan BeautifulSoup Python
Data benar-benar ada di mana-mana, dalam semua jenis dokumen. Namun tidak semuanya bermanfaat, maka perlu diurai untuk mendapatkan bagian-bagian yang dibutuhkan. Dokumen XML adalah salah satu dokumen yang menyimpan data. Mereka sangat mirip dengan file HTML, karena mereka memiliki struktur yang hampir sama same. Oleh karena itu, Anda harus menguraikannya untuk mendapatkan informasi penting, seperti yang Anda lakukan saat bekerja dengan HTML.

Ada dua aspek utama untuk mem-parsing file XML. Mereka:

Anda harus menemukan tag yang menyimpan informasi yang Anda inginkan, lalu mengekstrak informasi itu. Anda akan belajar bagaimana melakukan keduanya saat bekerja dengan file XML sebelum akhir artikel ini.

Instalasi

BeautifulSoup adalah salah satu library yang paling banyak digunakan dalam hal scraping web dengan Python. Karena file XML mirip dengan file HTML, ia juga mampu menguraikannya. Untuk mem-parsing file XML menggunakan BeautifulSoup, sebaiknya Anda menggunakan Python's lxml pengurai.

Anda dapat menginstal kedua perpustakaan menggunakan pip alat instalasi, melalui perintah di bawah ini:

pip install bs4 lxml

Untuk mengonfirmasi bahwa kedua perpustakaan berhasil diinstal, Anda dapat mengaktifkan shell interaktif dan mencoba mengimpor keduanya. Jika tidak ada kesalahan yang muncul, maka Anda siap untuk melanjutkan artikel lainnya.

Berikut ini contohnya:

$python
Python 3.7.4 (tag/v3.7.4:e09359112e, 8 Juli 2019, 20:34:20)
[MSC v.1916 64 bit (AMD64)] di win32
Ketik "bantuan", "hak cipta", "kredit" atau "lisensi" untuk informasi lebih lanjut.
>>> impor bs4
>>> impor lxml
>>>

Sebelum melanjutkan, Anda harus membuat file XML dari cuplikan kode di bawah ini. Ini cukup sederhana, dan harus sesuai dengan kasus penggunaan yang akan Anda pelajari di sisa artikel. Cukup salin, tempel di editor Anda dan simpan; nama seperti Sampel.xml seharusnya cukup.



Pohon

Pertama
Kedua

Ketiga

Satu
Dua
kembar


Keempat

Sekarang, dalam skrip Python Anda; Anda harus membaca file XML seperti file biasa, lalu meneruskannya ke BeautifulSoup. Sisa artikel ini akan menggunakan make bs_content variabel, jadi penting bagi Anda untuk mengambil langkah ini.

# Impor BeautifulSoup
dari bs4 impor BeautifulSoup sebagai bs
isi = []
# Baca file XML
dengan terbuka("contoh.xml", "r") sebagai file:
# Baca setiap baris dalam file, readlines() mengembalikan daftar baris
isi = file.garis baca()
# Gabungkan baris dalam daftar menjadi string
isi = "".bergabung (konten)
bs_konten = bs(konten, "lxml")

Contoh kode di atas impor sup cantik, kemudian membaca file XML seperti file biasa. Setelah itu, ia melewati konten ke dalam impor sup cantik perpustakaan serta parser pilihan.

Anda akan melihat bahwa kode tidak diimpor lxml. Tidak harus sebagai sup cantik akan memilih lxml parser sebagai hasil dari passing "lxml" ke dalam objek.

Sekarang, Anda dapat melanjutkan dengan sisa artikel.

Menemukan Tag

Salah satu tahap paling penting dari penguraian file XML adalah mencari tag. Ada berbagai cara untuk melakukannya saat menggunakan BeautifulSoup; jadi Anda perlu tahu tentang beberapa dari mereka untuk memiliki alat terbaik untuk situasi yang sesuai.

Anda dapat menemukan tag dalam dokumen XML dengan:

Menemukan Tag Berdasarkan Nama

Ada dua metode BeautifulSoup yang dapat Anda gunakan saat menemukan tag berdasarkan nama. Namun, kasus penggunaannya berbeda; mari kita lihat mereka.

Temukan

Dari pengalaman pribadi, Anda akan menggunakan Temukan metode lebih sering daripada metode lain untuk menemukan tag di artikel ini. Tag find menerima nama tag yang ingin Anda dapatkan, dan mengembalikan objek BeautifulSoup dari tag jika menemukannya; lain, itu kembali Tidak ada.

Berikut ini contohnya:

>>> hasil = bs_content.temukan("data")
>>> cetak (hasil)
Satu
>>> hasil = bs_content.temukan("unik")
>>> cetak (hasil)
kembar
>>> hasil = bs_content.temukan("ayah")
>>> cetak (hasil)
Tidak ada
>>> hasil = bs_content.temukan ("ibu")
>>> cetak (hasil)
Tidak ada

Jika Anda melihat contoh, Anda akan melihat bahwa Temukan metode mengembalikan tag jika cocok dengan namanya, jika tidak mengembalikan Tidak Ada. Namun, jika Anda melihat lebih dekat, Anda akan melihatnya hanya mengembalikan satu tag.

Misalnya, ketika temukan("data") dipanggil, itu hanya mengembalikan tag data pertama, tetapi tidak mengembalikan yang lain.

KENA KAU: Itu Temukan metode hanya akan mengembalikan tag pertama yang cocok dengan kuerinya.

Jadi bagaimana Anda bisa menemukan tag lain juga?? Itu membawa kita ke metode selanjutnya.

Temukan semua

Itu Temukan semua metode ini sangat mirip dengan Temukan metode. Satu-satunya perbedaan adalah ia mengembalikan daftar tag yang cocok dengan kuerinya. Ketika tidak menemukan tag apa pun, itu hanya mengembalikan daftar kosong. Karenanya, Temukan semua akan selalu mengembalikan daftar.

Berikut ini contohnya:

>>> hasil = bs_content.temukan_semua("data")
>>> cetak (hasil)
[Satu, Dua]
>>> hasil = bs_content.temukan_semua("anak")
>>> cetak (hasil)
[Pertama, Kedua,
Ketiga

Satu
Dua
kembar

, Keempat]
>>> hasil = bs_content.find_all("ayah")
>>> cetak (hasil
[]
>>> hasil = bs_content.temukan_semua("ibu")
>>> cetak (hasil)
[]

Sekarang setelah Anda tahu cara menggunakan Temukan dan Temukan semua metode, Anda dapat mencari tag di mana saja di dokumen XML. Namun, Anda dapat membuat pencarian Anda lebih kuat.

Berikut caranya:

Beberapa tag mungkin memiliki nama yang sama, tetapi atributnya berbeda. Misalnya, anak tag memiliki nama atribut dan nilai yang berbeda. Anda dapat melakukan pencarian spesifik berdasarkan itu.

Lihatlah ini:

>>> hasil = bs_content.find("anak", "nama": "Mawar")
>>> cetak (hasil)
Kedua
>>> hasil = bs_content.find_all("anak", "nama": "Mawar")
>>> cetak (hasil)
[Kedua]
>>> hasil = bs_content.find("anak", "nama": "Jack")
>>> cetak (hasil)
Pertama
>>> hasil = bs_content.find_all("anak", "nama": "Jack")
>>> cetak (hasil)
[Pertama]

Anda akan melihat bahwa ada sesuatu yang berbeda tentang penggunaan Temukan dan Temukan semua metode di sini: keduanya memiliki parameter kedua.

Saat Anda memasukkan kamus sebagai parameter kedua, Temukan dan Temukan semua metode lebih lanjut pencarian mereka untuk mendapatkan tag yang memiliki atribut dan nilai yang sesuai dengan kunci yang disediakan: pasangan nilai.

Misalnya, meskipun menggunakan Temukan metode dalam contoh pertama, itu mengembalikan yang kedua anak tag (bukan yang pertama anak tag), karena itu adalah tag pertama yang cocok dengan kueri. Itu Temukan semua tag mengikuti prinsip yang sama, kecuali bahwa ia mengembalikan semua tag yang cocok dengan kueri, bukan hanya yang pertama.

Menemukan Tag Berdasarkan Hubungan

Meskipun kurang populer daripada mencari berdasarkan nama tag, Anda juga dapat mencari tag berdasarkan hubungan. Namun dalam arti sebenarnya, ini lebih merupakan navigasi daripada pencarian.

Ada tiga hubungan kunci dalam dokumen XML:

Dari penjelasan di atas, Anda dapat menyimpulkan bahwa tag referensi adalah faktor terpenting dalam mencari tag berdasarkan hubungan. Oleh karena itu, mari kita cari tag referensi, dan lanjutkan artikelnya.

Lihatlah ini:

>>> anak_ketiga = bs_konten.find("anak", "nama": "Ivy Biru")
>>> cetak (anak_ketiga)

Ketiga

Satu
Dua
kembar

Dari contoh kode di atas, tag referensi untuk sisa bagian ini akan menjadi yang ketiga anak tag, disimpan di a anak_ketiga variabel. Pada subbagian di bawah ini, Anda akan melihat cara mencari tag berdasarkan hubungan orang tua, saudara, dan anak dengan tag referensi.

Menemukan Orang Tua

Untuk menemukan tag induk dari tag referensi, Anda akan menggunakan induk atribut. Melakukan ini akan mengembalikan tag induk, serta tag di bawahnya. Perilaku ini cukup dapat dimengerti, karena tag anak-anak adalah bagian dari tag induk.

Berikut ini contohnya:

>>> hasil = third_child.induk
>>> cetak (hasil)

Pertama
Kedua

Ketiga

Satu
Dua
kembar


Keempat

Menemukan Anak

Untuk menemukan tag anak dari tag referensi, Anda akan menggunakan anak-anak atribut. Melakukan ini akan mengembalikan tag anak, serta sub-tag di bawah masing-masing tag tersebut. Perilaku ini juga dapat dimengerti, karena tag anak-anak sering kali memiliki tag anak-anak mereka sendiri juga.

Satu hal yang harus Anda perhatikan adalah bahwa anak-anak atribut mengembalikan tag anak sebagai generator. Jadi jika Anda memerlukan daftar tag anak, Anda harus mengonversi generator menjadi daftar.

Berikut ini contohnya:

>>> hasil = daftar(anak_ketiga.anak-anak)
>>> cetak (hasil)
['\n        Ketiga\n     ',
Satu
Dua
kembar
, '\n']

Jika Anda melihat lebih dekat pada contoh di atas, Anda akan melihat bahwa beberapa nilai dalam daftar bukanlah tag. Itu yang perlu diwaspadai.

KENA KAU: Itu anak-anak atribut tidak hanya mengembalikan tag anak, tetapi juga mengembalikan teks dalam tag referensi.

Menemukan Saudara

Yang terakhir di bagian ini adalah menemukan tag yang bersaudara dengan tag referensi reference. Untuk setiap tag referensi, mungkin ada tag saudara sebelum dan sesudahnya. Itu sebelumnya_saudara atribut akan mengembalikan tag saudara sebelum tag referensi, dan saudara_berikutnya atribut akan mengembalikan tag saudara setelahnya.

Sama seperti anak-anak atribut, itu sebelumnya_saudara dan saudara_berikutnya atribut akan mengembalikan generator. Jadi, Anda perlu mengonversi ke daftar jika Anda memerlukan daftar saudara kandung.

Lihatlah ini:

>>> saudara_sebelumnya = daftar(anak_ketiga.saudara_sebelumnya)
>>> cetak (saudara_sebelumnya)
['\n', Kedua, '\n',
Pertama, '\n']
>>> saudara_berikutnya = daftar(anak_ketiga.saudara_berikutnya)
>>> cetak (next_siblings)
['\n', Keempat]
>>> print(saudara_sebelumnya + saudara_berikutnya)
['\n', Kedua, '\n', Pertama,
'\n', '\n', Keempat, '\n']

Contoh pertama menunjukkan saudara kandung sebelumnya, contoh kedua menunjukkan saudara berikutnya; kemudian kedua hasil digabungkan untuk menghasilkan daftar semua saudara kandung untuk tag referensi.

Mengekstrak Dari Tag

Saat mengurai dokumen XML, banyak pekerjaan terletak pada menemukan tag yang tepat. Namun, ketika Anda menemukannya, Anda mungkin juga ingin mengekstrak informasi tertentu dari tag tersebut, dan itulah yang akan diajarkan bagian ini kepada Anda.

Anda akan melihat cara mengekstrak yang berikut:

Mengekstrak Nilai Atribut Tag

Terkadang, Anda mungkin memiliki alasan untuk mengekstrak nilai atribut dalam tag. Dalam pasangan atribut-nilai berikut misalnya: nama = “Mawar”, Anda mungkin ingin mengekstrak “Mawar.”

Untuk melakukan ini, Anda dapat menggunakan Dapatkan metode, atau mengakses nama atribut menggunakan [] seperti indeks, seperti yang Anda lakukan saat bekerja dengan kamus.

Berikut ini contohnya:

>>> hasil = third_child.dapatkan("nama")
>>> cetak (hasil)
Ivy Biru
>>> hasil = third_child["nama"]
>>> cetak (hasil)
Ivy Biru

Mengekstrak Teks Tag

Saat Anda ingin mengakses nilai teks dari sebuah tag, Anda dapat menggunakan teks atau senar atribut. Keduanya akan mengembalikan teks dalam sebuah tag, dan bahkan tag anak-anak. Namun, teks atribut akan mengembalikannya sebagai string tunggal, digabungkan; selagi senar atribut akan mengembalikannya sebagai generator yang dapat Anda konversi menjadi daftar.

Berikut ini contohnya:

>>> hasil = third_child.teks
>>> cetak (hasil)
'\n    Ketiga\n      \nSatu\nDua\nKembar\n\n'
>>> hasil = daftar(anak_ketiga.string)
>>> cetak (hasil)
['\n  Ketiga\n      ', '\n', 'Satu', '\n', 'Dua', '\n', 'Kembar', '\n', '\n']

Mengekstrak Konten Tag

Selain mengekstrak nilai atribut, dan teks tag, Anda juga dapat mengekstrak semua konten tag. Untuk melakukan ini, Anda dapat menggunakan isi atribut; itu sedikit mirip dengan anak-anak atribut dan akan menghasilkan hasil yang sama. Namun, sementara anak-anak atribut mengembalikan generator, the isi atribut mengembalikan daftar.

Berikut ini contohnya:

>>> hasil = third_child.isi
>>> cetak (hasil)
['\n        Ketiga\n     ',
Satu
Dua
kembar
, '\n']

Mencetak Indah

Sejauh ini, Anda telah melihat beberapa metode dan atribut penting yang berguna saat mengurai dokumen XML menggunakan BeautifulSoup. Tetapi jika Anda perhatikan, ketika Anda mencetak tag ke layar, mereka memiliki semacam tampilan yang berkerumun. Meskipun penampilan mungkin tidak berdampak langsung pada produktivitas Anda, ini dapat membantu Anda menguraikan lebih efektif dan membuat pekerjaan tidak terlalu membosankan.

Berikut ini contoh pencetakan dengan cara biasa:

>>> cetak (anak_ketiga)

Ketiga

Satu
Dua
kembar

Namun, Anda dapat meningkatkan penampilannya dengan menggunakan mendandani metode. Cukup hubungi mendandani metode pada tag saat mencetak, dan Anda akan mendapatkan sesuatu yang menyenangkan secara visual.

Lihatlah ini:

Kesimpulan

Parsing dokumen adalah aspek penting dari sumber data. Dokumen XML cukup populer, dan semoga Anda lebih siap untuk menggunakannya, dan mengekstrak data yang Anda inginkan.

Dari artikel ini, Anda sekarang dapat:

Jika Anda merasa tersesat, dan cukup baru di perpustakaan BeautifulSoup, Anda dapat melihat tutorial BeautifulSoup untuk pemula.

Cara Mengubah Pengaturan Mouse dan Touchpad Menggunakan Xinput di Linux
Sebagian besar distribusi Linux dikirimkan dengan pustaka "libinput" secara default untuk menangani kejadian input pada sistem. Ini dapat memproses ke...
Petakan ulang tombol mouse Anda secara berbeda untuk perangkat lunak yang berbeda dengan Kontrol Tombol X-Mouse
Mungkin Anda membutuhkan alat yang dapat membuat kontrol mouse Anda berubah dengan setiap aplikasi yang Anda gunakan. Jika demikian, Anda dapat mencob...
Ulasan Mouse Nirkabel Microsoft Sculpt Touch
Saya baru-baru ini membaca tentang Microsoft Sculpt Touch mouse nirkabel dan memutuskan untuk membelinya. Setelah menggunakannya untuk sementara waktu...