Sup Cantik

Cara Menghuraikan Fail XML Menggunakan BeautifulSoup Python

Cara Menghuraikan Fail XML Menggunakan BeautifulSoup Python
Data secara harfiah ada di mana-mana, dalam semua jenis dokumen. Tetapi tidak semuanya berguna, oleh itu perlunya menguraikannya untuk mendapatkan bahagian yang diperlukan. Dokumen XML adalah salah satu dokumen yang menyimpan data. Mereka sangat serupa dengan fail HTML, kerana mempunyai struktur yang hampir sama. Oleh itu, anda perlu menghuraikannya untuk mendapatkan maklumat penting, seperti yang anda lakukan ketika bekerja dengan HTML.

Terdapat dua aspek utama untuk menguraikan fail XML. Mereka adalah:

Anda perlu mencari teg yang mengandungi maklumat yang anda mahukan, kemudian mengekstrak maklumat tersebut. Anda akan belajar melakukan kedua-duanya ketika bekerja dengan fail XML sebelum akhir artikel ini.

Pemasangan

BeautifulSoup adalah salah satu perpustakaan yang paling kerap digunakan untuk mengikis laman web dengan Python. Oleh kerana fail XML serupa dengan fail HTML, file XML juga dapat dihuraikan. Walau bagaimanapun, untuk menguraikan fail XML menggunakan BeautifulSoup, lebih baik anda menggunakan Python's lxml menghuraikan.

Anda boleh memasang kedua-dua perpustakaan menggunakan pip alat pemasangan, melalui arahan di bawah:

memasang pip bs4 lxml

Untuk mengesahkan bahawa kedua-dua perpustakaan berjaya dipasang, anda boleh mengaktifkan shell interaktif dan cuba mengimport kedua-duanya. Sekiranya tiada ralat muncul, maka anda sudah bersedia untuk membaca artikel yang lain.

Inilah contohnya:

$ ular sawa
Python 3.7.4 (teg / v3.7.4: e09359112e, 8 Jul 2019, 20:34:20)
[MSC v.1916 64 bit (AMD64)] pada win32
Ketik "bantuan", "hak cipta", "kredit" atau "lesen" untuk maklumat lebih lanjut.
>>> import bs4
>>> import lxml
>>>

Sebelum meneruskan, anda harus membuat fail XML dari coretan kod di bawah. Ia cukup mudah, dan sesuai dengan kes penggunaan yang akan anda pelajari dalam artikel yang lain. Cukup salin, tampal di editor anda dan simpan; nama seperti contoh.xml semestinya mencukupi.



Pokok

Pertama
Kedua

Ketiga

Satu
Dua
Kembar


Keempat

Sekarang, dalam skrip Python anda; anda perlu membaca fail XML seperti fail biasa, kemudian memasukkannya ke dalam BeautifulSoup. Selebihnya dari artikel ini akan memanfaatkan bs_content berubah-ubah, jadi penting untuk anda mengambil langkah ini.

# Import Sup Cantik
dari bs4 import BeautifulSoup sebagai bs
kandungan = []
# Baca fail XML
dengan terbuka ("sampel.xml "," r ") sebagai fail:
# Baca setiap baris dalam fail, readlines () mengembalikan senarai baris
kandungan = fail.bacaan semula ()
# Gabungkan garis dalam senarai menjadi rentetan
kandungan = "".sertai (kandungan)
bs_content = bs (kandungan, "lxml")

Contoh kod di atas import Sup Cantik, maka ia membaca fail XML seperti fail biasa. Selepas itu, ia memasukkan kandungan ke dalam yang diimport Sup Cantik perpustakaan serta penghurai pilihan.

Anda akan melihat bahawa kod tidak diimport lxml. Tidak semestinya Sup Cantik akan memilih lxml menghuraikan hasil daripada berlalu "Lxml" ke dalam objek.

Sekarang, anda boleh meneruskan artikel yang lain.

Mencari Tag

Salah satu peringkat yang paling penting dalam menguraikan fail XML adalah mencari tag. Terdapat pelbagai cara untuk menyelesaikannya semasa menggunakan BeautifulSoup; jadi anda perlu mengetahui segelintir dari mereka untuk mempunyai alat terbaik untuk situasi yang sesuai.

Anda boleh mencari tag dalam dokumen XML dengan:

Mencari Tanda Nama

Terdapat dua kaedah BeautifulSoup yang boleh anda gunakan semasa mencari tag mengikut nama. Walau bagaimanapun, kes penggunaannya berbeza; mari kita lihat mereka.

cari

Dari pengalaman peribadi, anda akan menggunakan cari kaedah lebih kerap daripada kaedah lain untuk mencari tag dalam artikel ini. Tag find menerima nama tag yang anda mahu dapatkan, dan mengembalikan objek BeautifulSoup dari tag jika ia dapat; lain, ia kembali Tiada.

Inilah contohnya:

>>> hasil = bs_content.cari ("data")
>>> cetak (hasil)
Satu
>>> hasil = bs_content.cari ("unik")
>>> cetak (hasil)
Kembar
>>> hasil = bs_content.cari ("bapa")
>>> cetak (hasil)
Tiada
>>> hasil = bs_content.cari ("ibu")
>>> cetak (hasil)
Tiada

Sekiranya anda melihat contohnya, anda akan melihat bahawa cari kaedah mengembalikan teg jika sesuai dengan namanya, jika tidak, ia mengembalikan Tiada. Walau bagaimanapun, jika anda melihatnya dengan lebih dekat, anda akan melihatnya hanya mengembalikan satu teg.

Contohnya, bila cari ("data") dipanggil, ia hanya mengembalikan tag data pertama, tetapi tidak mengembalikan yang lain.

GOTCHA: The cari kaedah hanya akan mengembalikan teg pertama yang sesuai dengan pertanyaannya.

Jadi bagaimana anda dapat mencari tag lain juga? Itu membawa kita ke kaedah seterusnya.

cari_semua

The cari_semua kaedahnya agak serupa dengan kaedah cari kaedah. Satu-satunya perbezaan adalah bahawa ia mengembalikan senarai tag yang sesuai dengan pertanyaannya. Apabila tidak menemui sebarang tag, ia hanya mengembalikan senarai kosong. Oleh itu, cari_semua akan sentiasa mengembalikan senarai.

Inilah contohnya:

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

Satu
Dua
Kembar

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

Sekarang anda tahu bagaimana menggunakan cari dan cari_semua kaedah, anda boleh mencari tag di mana sahaja dalam dokumen XML. Walau bagaimanapun, anda boleh menjadikan carian anda lebih hebat.

Ini caranya:

Beberapa teg mungkin mempunyai nama yang sama, tetapi atribut yang berbeza. Sebagai contoh, anak tag mempunyai nama atribut dan nilai yang berbeza. Anda boleh membuat carian khusus berdasarkan carian tersebut.

Lihat ini:

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

Anda akan melihat bahawa ada sesuatu yang berbeza mengenai penggunaan cari dan cari_semua kaedah di sini: kedua-duanya mempunyai parameter kedua.

Apabila anda meneruskan kamus sebagai parameter kedua, the cari dan cari_semua kaedah melancarkan pencarian mereka untuk mendapatkan teg yang mempunyai atribut dan nilai yang sesuai dengan kunci yang disediakan: pasangan nilai.

Sebagai contoh, walaupun menggunakan cari kaedah dalam contoh pertama, ia mengembalikan kedua anak tag (bukannya yang pertama anak tag), kerana itulah tag pertama yang sesuai dengan pertanyaan. The cari_semua tag mengikuti prinsip yang sama, kecuali bahawa ia mengembalikan semua tag yang sesuai dengan pertanyaan, bukan hanya yang pertama.

Mencari Tag Melalui Hubungan

Walaupun kurang popular daripada mencari dengan nama tag, anda juga boleh mencari teg mengikut hubungan. Namun, dalam erti kata sebenarnya, lebih banyak menavigasi daripada mencari.

Terdapat tiga hubungan utama dalam dokumen XML:

Dari penjelasan di atas, anda mungkin menyimpulkan bahawa tag rujukan adalah faktor terpenting dalam mencari tag mengikut hubungan. Oleh itu, mari cari tag rujukan, dan teruskan artikelnya.

Lihat ini:

>>> anak ketiga = bs_content.cari ("anak", "nama": "Blue Ivy")
>>> cetak (anak ketiga)

Ketiga

Satu
Dua
Kembar

Dari contoh kod di atas, tag rujukan untuk bahagian ini akan menjadi yang ketiga anak tag, disimpan dalam a anak ketiga pemboleh ubah. Pada bahagian di bawah, anda akan melihat cara mencari teg berdasarkan hubungan ibu bapa, saudara, dan anak mereka dengan tag rujukan.

Mencari Ibu Bapa

Untuk mencari tag induk dari tag rujukan, anda akan menggunakan ibu bapa atribut. Melakukan ini mengembalikan tag induk, dan juga tag di bawahnya. Tingkah laku ini cukup difahami, kerana tanda anak adalah sebahagian daripada tanda ibu bapa.

Inilah contohnya:

>>> hasil = anak ketiga.ibu bapa
>>> cetak (hasil)

Pertama
Kedua

Ketiga

Satu
Dua
Kembar


Keempat

Mencari Anak

Untuk mencari tanda anak tag rujukan, anda akan menggunakan kanak-kanak atribut. Melakukan ini mengembalikan tag anak-anak, dan juga sub-tag di bawah masing-masing. Tingkah laku ini juga dapat difahami, kerana tag kanak-kanak juga sering mempunyai tag anak mereka sendiri.

Satu perkara yang harus anda perhatikan adalah bahawa kanak-kanak atribut mengembalikan tanda anak sebagai penjana. Oleh itu, jika anda memerlukan senarai tag kanak-kanak, anda mesti menukar penjana menjadi senarai.

Inilah contohnya:

>>> hasil = senarai (anak ketiga.kanak-kanak)
>>> cetak (hasil)
['\ n Ketiga \ n',
Satu
Dua
Kembar
, '\ n']

Sekiranya anda melihat lebih dekat contoh di atas, anda akan melihat bahawa beberapa nilai dalam senarai itu bukan tag. Itu sesuatu yang perlu anda perhatikan.

GOTCHA: The kanak-kanak atribut tidak hanya mengembalikan tag anak, tetapi juga mengembalikan teks dalam tag rujukan.

Mencari Adik Beradik

Yang terakhir dalam bahagian ini adalah mencari tag yang merupakan adik beradik kepada tag rujukan. Untuk setiap tag rujukan, mungkin ada tag saudara sebelum dan sesudahnya. The saudara_ terdahulu atribut akan mengembalikan tag saudara sebelum tag rujukan, dan adik-beradik seterusnya atribut akan mengembalikan tag saudara selepasnya.

Sama seperti kanak-kanak atribut, yang saudara_ terdahulu dan adik-beradik seterusnya atribut akan mengembalikan penjana. Oleh itu, anda perlu menukar ke senarai jika anda memerlukan senarai adik-beradik.

Lihat ini:

>>> sebelumnya_siblings = senarai (anak ketiga.saudara_ terdahulu)
>>> cetak (saudara_sebelumnya)
['\ n', Kedua, '\ n',
Pertama, '\ n']
>>> next_siblings = senarai (anak ketiga.adik-beradik seterusnya)
>>> cetak (adik-beradik sebelah)
['\ n', Keempat]
>>> cetak (saudara_sebelum + saudara_seterusnya)
['\ n', Kedua, '\ n', Pertama,
'\ n', '\ n', Keempat, '\ n']

Contoh pertama menunjukkan adik-beradik sebelumnya, yang kedua menunjukkan adik-beradik seterusnya; maka kedua-dua hasil digabungkan untuk menghasilkan senarai semua adik-beradik untuk tag rujukan.

Mengekstrak Daripada Teg

Semasa menguraikan dokumen XML, banyak pekerjaan terletak pada mencari tanda yang betul. Namun, apabila anda menjumpainya, anda mungkin juga ingin mengekstrak maklumat tertentu dari tag tersebut, dan itulah yang akan diajarkan oleh bahagian ini kepada anda.

Anda akan melihat cara mengekstrak perkara berikut:

Mengekstrak Nilai Atribut Tag

Kadang kala, anda mungkin mempunyai alasan untuk mengekstrak nilai untuk atribut dalam teg. Dalam pasangan nilai-atribut berikut misalnya: nama = "Rose", anda mungkin mahu mengekstrak “Rose."

Untuk melakukan ini, anda boleh menggunakan dapatkan kaedah, atau mengakses nama atribut menggunakan [] seperti indeks, seperti yang anda lakukan ketika bekerja dengan kamus.

Inilah contohnya:

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

Mengekstrak Teks Tag

Apabila anda ingin mengakses nilai teks dari tag, anda boleh menggunakan teks atau tali atribut. Kedua-duanya akan mengembalikan teks dalam tag, dan juga tag kanak-kanak. Walau bagaimanapun teks atribut akan mengembalikannya sebagai rentetan tunggal, digabungkan; Sementara tali atribut akan mengembalikannya sebagai penjana yang anda boleh ubah menjadi senarai.

Inilah contohnya:

>>> hasil = anak ketiga.teks
>>> cetak (hasil)
'\ n Ketiga \ n \ nSatu \ nDua \ nTenang \ n \ n'
>>> hasil = senarai (anak ketiga.tali)
>>> cetak (hasil)
['\ n Ketiga \ n', '\ n', 'Satu', '\ n', 'Dua', '\ n', 'Kembar', '\ n', '\ n']

Mengekstrak Kandungan Tag

Selain mengekstrak nilai atribut, dan teks teg, anda juga dapat mengekstrak semua kandungan teg. Untuk melakukan ini, anda boleh menggunakan kandungan atribut; ia agak serupa dengan kanak-kanak atribut dan akan memberikan hasil yang sama. Walau bagaimanapun, semasa kanak-kanak atribut mengembalikan penjana, kandungan atribut mengembalikan senarai.

Inilah contohnya:

>>> hasil = anak ketiga.kandungan
>>> cetak (hasil)
['\ n Ketiga \ n',
Satu
Dua
Kembar
, '\ n']

Percetakan Cantik

Setakat ini, anda telah melihat beberapa kaedah dan atribut penting yang berguna semasa menguraikan dokumen XML menggunakan BeautifulSoup. Tetapi jika anda perhatikan, ketika anda mencetak tag ke layar, mereka memiliki semacam tampilan berkelompok. Walaupun penampilan mungkin tidak memberi kesan langsung pada produktiviti anda, ia dapat membantu anda menguraikan dengan lebih berkesan dan membuat kerja menjadi tidak membosankan.

Berikut adalah contoh mencetak dengan cara biasa:

>>> cetak (anak ketiga)

Ketiga

Satu
Dua
Kembar

Walau bagaimanapun, anda boleh memperbaikinya dengan menggunakan kepura-puraan kaedah. Cukup hubungi kepura-puraan kaedah pada tag semasa mencetak, dan anda akan mendapat sesuatu yang menyenangkan secara visual.

Lihat ini:

Kesimpulannya

Menghuraikan dokumen adalah aspek penting dalam mendapatkan data. Dokumen XML cukup popular, dan mudah-mudahan anda lebih lengkap untuk membawanya dan mengekstrak data yang anda mahukan.

Dari artikel ini, anda kini dapat:

Sekiranya anda merasa agak tersesat, dan cukup baru di perpustakaan BeautifulSoup, anda boleh melihat tutorial BeautifulSoup untuk pemula.

HD Remastered Games untuk Linux yang Tidak Pernah Melancarkan Linux Sebelumnya
Banyak pembangun dan penerbit permainan hadir dengan penghapus HD permainan lama untuk memperpanjang usia francais, harap peminat meminta keserasian d...
Cara Menggunakan AutoKey untuk Mengautomasikan Permainan Linux
AutoKey adalah utiliti automasi desktop untuk Linux dan X11, yang diprogramkan dalam Python 3, GTK dan Qt. Dengan menggunakan skrip dan fungsi MACRO, ...
Cara Menunjukkan Kaunter FPS dalam Permainan Linux
Permainan Linux mendapat dorongan utama ketika Valve mengumumkan sokongan Linux untuk klien Steam dan permainan mereka pada tahun 2012. Sejak itu, ban...