首页 > 后端开发 > Python教程 > 使用 Beautiful Soup 在 Python 中进行网页抓取和解析 HTML

使用 Beautiful Soup 在 Python 中进行网页抓取和解析 HTML

Linda Hamilton
发布: 2025-01-10 12:15:41
原创
967 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板