ホームページ > バックエンド開発 > Python チュートリアル > 美しいスープを使用した Python での HTML の Web スクレイピングと解析

美しいスープを使用した Python での HTML の Web スクレイピングと解析

Linda Hamilton
リリース: 2025-01-10 12:15:41
オリジナル
944 人が閲覧しました

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 ページはユニークです。データ抽出には多くの場合、創造性と実験が必要です。

Web Scraping and Parsing HTML in Python with Beautiful Soup

私たちの目標は、重複やリミックスを除いた、独自の MIDI ファイルをダウンロードすることです。ブラウザ開発者ツール (右クリック、「検査」) は、プログラムによるアクセスのための HTML 要素を識別するのに役立ちます。

Web Scraping and Parsing HTML in Python with Beautiful Soup

正規表現で 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 Scraping and Parsing HTML in Python with Beautiful Soup

ウェブの可能性を探る

Web スクレイピングは、膨大なデータセットへの扉を開きます。 Web ページを変更するとコードが壊れる可能性があることに注意してください。スクリプトを常に最新の状態に保ちます。 この基盤を構築するには、Mido (MIDI データ処理用) や Magenta (ニューラル ネットワーク トレーニング用) などのライブラリを使用します。

以上が美しいスープを使用した Python での HTML の Web スクレイピングと解析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート