利用 Python 和 Beautiful Soup 來發揮網頁抓取的力量:一個 MIDI 音樂範例
網路是一個資訊寶庫,但如果沒有專用的 API,以程式設計方式存取它可能會很困難。 Python 的 Beautiful Soup 程式庫提供了一個強大的解決方案,讓您能夠直接從網頁中抓取和解析資料。
讓我們透過抓取 MIDI 資料來訓練 Magenta 神經網路來產生經典的任天堂風格音樂來探索這一點。 我們將從電玩音樂檔案 (VGM) 中取得 MIDI 檔案。
設定您的環境
確保您已安裝 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。 每個網頁都是獨一無二的;資料擷取通常需要創造力和實驗。
我們的目標是下載獨特的 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 檔案(取決於網站目前的內容)。
探索網路的潛力
網路抓取為海量資料集打開了大門。請記住,網頁變更可能會破壞您的程式碼;保持腳本更新。 使用 Mido(用於 MIDI 資料處理)和 Magenta(用於神經網路訓練)等函式庫來建立此基礎。
以上是使用 Beautiful Soup 在 Python 中進行網頁抓取和解析 HTML的詳細內容。更多資訊請關注PHP中文網其他相關文章!