Manfaatkan Kuasa Mengikis Web dengan Python dan Sup Cantik: Contoh Muzik MIDI
Internet ialah khazanah maklumat, tetapi mengaksesnya secara pengaturcaraan boleh menjadi mencabar tanpa API khusus. Pustaka Beautiful Soup Python menawarkan penyelesaian yang berkuasa, membolehkan anda mengikis dan menghuraikan data terus daripada halaman web.
Mari kita terokai ini dengan mengikis data MIDI untuk melatih rangkaian saraf Magenta bagi menjana muzik gaya Nintendo klasik. Kami akan mendapatkan fail MIDI daripada Arkib Muzik Permainan Video (VGM).
Menyediakan Persekitaran Anda
Pastikan anda memasang Python 3 dan pip. Adalah penting untuk mencipta dan mengaktifkan persekitaran maya sebelum memasang kebergantungan:
<code class="language-bash">pip install requests==2.22.0 beautifulsoup4==4.8.1</code>
Kami menggunakan Beautiful Soup 4 (Beautiful Soup 3 tidak lagi diselenggara).
Mengikis dan Menghuraikan dengan Permintaan dan Sup Cantik
Mula-mula, mari ambil HTML dan buat objek BeautifulSoup:
<code class="language-python">import requests from bs4 import BeautifulSoup vgm_url = 'https://www.vgmusic.com/music/console/nintendo/nes/' html_text = requests.get(vgm_url).text soup = BeautifulSoup(html_text, 'html.parser')</code>
Objek soup
membenarkan navigasi HTML. soup.title
memberikan tajuk halaman; print(soup.get_text())
memaparkan semua teks.
Menguasai Kuasa Sup Cantik
Kaedah find()
dan find_all()
adalah penting. soup.find()
menyasarkan elemen tunggal (mis., soup.find(id='banner_ad').text
mendapat teks iklan sepanduk). soup.find_all()
berulang melalui berbilang elemen. Contohnya, ini mencetak semua URL hiperpautan:
<code class="language-python">for link in soup.find_all('a'): print(link.get('href'))</code>
find_all()
menerima hujah seperti ungkapan biasa atau atribut teg untuk penapisan yang tepat. Rujuk dokumentasi Beautiful Soup untuk ciri lanjutan.
Menavigasi dan Menghuraikan HTML
Sebelum menulis kod penghuraian, periksa HTML yang diberikan penyemak imbas. Setiap halaman web adalah unik; pengekstrakan data selalunya memerlukan kreativiti dan percubaan.
Matlamat kami adalah untuk memuat turun fail MIDI yang unik, tidak termasuk pendua dan campuran semula. Alat pembangun penyemak imbas (klik kanan, "Periksa") membantu mengenal pasti elemen HTML untuk akses program.
Mari kita gunakan find_all()
dengan ungkapan biasa untuk menapis pautan yang mengandungi fail MIDI (tidak termasuk yang mempunyai tanda kurung dalam nama mereka):
Buat nes_midi_scraper.py
:
<code class="language-python">import re import requests from bs4 import BeautifulSoup vgm_url = 'https://www.vgmusic.com/music/console/nintendo/nes/' html_text = requests.get(vgm_url).text soup = BeautifulSoup(html_text, 'html.parser') if __name__ == '__main__': attrs = {'href': re.compile(r'\.mid$')} tracks = soup.find_all('a', attrs=attrs, string=re.compile(r'^((?!\().)*$')) count = 0 for track in tracks: print(track) count += 1 print(len(tracks))</code>
Ini menapis fail MIDI, mencetak teg pautannya dan memaparkan jumlah kiraan. Lari dengan python nes_midi_scraper.py
.
Memuat turun Fail MIDI
Sekarang, mari muat turun fail MIDI yang ditapis. Tambahkan fungsi download_track
pada nes_midi_scraper.py
:
<code class="language-bash">pip install requests==2.22.0 beautifulsoup4==4.8.1</code>
Fungsi ini memuat turun setiap trek dan menyimpannya dengan nama fail yang unik. Jalankan skrip dari direktori simpan yang anda inginkan. Anda harus memuat turun kira-kira 2230 fail MIDI (bergantung pada kandungan semasa tapak web).
Meneroka Potensi Web
Pengikisan web membuka pintu kepada set data yang luas. Ingat bahawa perubahan halaman web boleh memecahkan kod anda; pastikan skrip anda dikemas kini. Gunakan perpustakaan seperti Mido (untuk pemprosesan data MIDI) dan Magenta (untuk latihan rangkaian saraf) untuk membina asas ini.
Atas ialah kandungan terperinci Mengikis Web dan Menghuraikan HTML dalam Python dengan Sup Cantik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!