首頁 >後端開發 >Python教學 >使用 Beautiful Soup 在 Python 中進行網頁抓取和解析 HTML

使用 Beautiful Soup 在 Python 中進行網頁抓取和解析 HTML

Linda Hamilton
Linda Hamilton原創
2025-01-10 12:15:41972瀏覽

利用 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。 每個網頁都是獨一無二的;資料擷取通常需要創造力和實驗。

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 Scraping and Parsing HTML in Python with Beautiful Soup

探索網路的潛力

網路抓取為海量資料集打開了大門。請記住,網頁變更可能會破壞您的程式碼;保持腳本更新。 使用 Mido(用於 MIDI 資料處理)和 Magenta(用於神經網路訓練)等函式庫來建立此基礎。

以上是使用 Beautiful Soup 在 Python 中進行網頁抓取和解析 HTML的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn