利用 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中文网其他相关文章!