Python と美しいスープを使用して Web スクレイピングの力を活用する: MIDI 音楽の例
インターネットは情報の宝庫ですが、専用の API がなければプログラムでアクセスするのは困難な場合があります。 Python の Beautiful Soup ライブラリは、Web ページから直接データを収集して解析できる強力なソリューションを提供します。
MIDI データをスクレイピングして、クラシックな任天堂スタイルの音楽を生成するマゼンタのニューラル ネットワークをトレーニングすることで、これを調べてみましょう。 MIDI ファイルは Video Game Music Archive (VGM) から入手します。
環境のセットアップ
Python 3 と pip がインストールされていることを確認してください。 依存関係をインストールする前に、仮想環境を作成してアクティブ化することが重要です:
<code class="language-bash">pip install requests==2.22.0 beautifulsoup4==4.8.1</code>
私たちは Beautiful Soup 4 を使用しています (Beautiful Soup 3 は現在メンテナンスされていません)。
リクエストと美しいスープによるスクレイピングと解析
まず、HTML を取得して 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>
soup
オブジェクトにより、HTML のナビゲーションが可能になります。 soup.title
はページのタイトルを与えます。 print(soup.get_text())
すべてのテキストが表示されます。
美しいスープの力を使いこなす
find()
メソッドと find_all()
メソッドは必須です。 soup.find()
は単一の要素をターゲットにします (例: soup.find(id='banner_ad').text
はバナー広告テキストを取得します)。 soup.find_all()
は複数の要素を反復処理します。 たとえば、これはすべてのハイパーリンク URL を出力します:
<code class="language-python">for link in soup.find_all('a'): print(link.get('href'))</code>
find_all()
は、正確なフィルタリングのために正規表現やタグ属性などの引数を受け入れます。 高度な機能については、Beautiful Soup のドキュメントを参照してください。
HTML のナビゲーションと解析
解析コードを記述する前に、ブラウザーでレンダリングされた HTML を調べてください。 各 Web ページはユニークです。データ抽出には多くの場合、創造性と実験が必要です。
私たちの目標は、重複やリミックスを除いた、独自の MIDI ファイルをダウンロードすることです。ブラウザ開発者ツール (右クリック、「検査」) は、プログラムによるアクセスのための HTML 要素を識別するのに役立ちます。
正規表現で find_all()
を使用して、MIDI ファイルを含むリンク (名前に括弧が含まれているリンクを除く) をフィルタリングしてみましょう:
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>
これは MIDI ファイルをフィルタリングし、そのリンク タグを印刷し、合計数を表示します。 python nes_midi_scraper.py
.
MIDI ファイルのダウンロード
それでは、フィルタリングされた MIDI ファイルをダウンロードしましょう。 download_track
関数を nes_midi_scraper.py
に追加します:
<code class="language-bash">pip install requests==2.22.0 beautifulsoup4==4.8.1</code>
この機能は各トラックをダウンロードし、一意のファイル名で保存します。希望の保存ディレクトリからスクリプトを実行します。 約 2230 の MIDI ファイルをダウンロードする必要があります (Web サイトの現在のコンテンツによって異なります)。
ウェブの可能性を探る
Web スクレイピングは、膨大なデータセットへの扉を開きます。 Web ページを変更するとコードが壊れる可能性があることに注意してください。スクリプトを常に最新の状態に保ちます。 この基盤を構築するには、Mido (MIDI データ処理用) や Magenta (ニューラル ネットワーク トレーニング用) などのライブラリを使用します。
以上が美しいスープを使用した Python での HTML の Web スクレイピングと解析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。