如何使用 Python 抓取 Spotify 播放列表数据

评论: 0

数据搜刮可被描述为从网站上自动收集数据,就 Spotify 而言,它意味着收集有关曲目、艺术家、专辑和其他有用元素的信息,用于分析或创建音乐应用程序。

使用 Python 可以帮助提取 Spotify 播放列表、艺术家姓名和曲目。这要归功于 Spotify API,它允许您在不违反规则的情况下合法获取数据。不过,如果 API 没有提供必要的工具,您可以使用网络刮擦。BeautifulSoup 和 Selenium 是刮擦 Spotify 的完美工具。

在本 Spotify 数据搜刮教程中,您将学习如何安装库、使用 Spotify API、应用搜刮并将数据保存为 CSV 格式。

安装所需程序库

因此,我们已经知道有哪些工具适合使用 Python 搜刮 Spotify 数据。现在,让我们看看如何安装必要的库:


pip install beautifulsoup4
pip install selenium
pip install requests


那么,每一种都有什么作用呢?

  • BeautifulSoup 是一个非常方便的库,可以从网页中检索信息。 它从上到下浏览网页的 HTML 代码,然后抓取必要的元素。 它还可用于处理静态内容,例如从当前打开的页面中提取曲目列表。
  • 虽然 BeautifulSoup 在静态网站上表现出色,但在动态内容上还远远不够。 动态网站需要某种形式的用户参与,这就是 Selenium 的作用所在。 该库可帮助您以编程方式打开网页、按下按钮、键入文本、滚动并使用网站上的各种元素。
  • Requests 库用于创建 HTTP 请求。 有了它,你可以轻松发送 GET 或 POST 请求并处理 API。 如果不需要与网站进行大量交互,例如通过 Selenium,那么使用 Requests 会更加简单直接。

下载网络驱动程序

要让 Selenium 控制浏览器并与 Spotify 互动,它需要一个网络驱动程序。这是一个特殊的软件,可以自动打开网页、点击按钮等。

我们将使用 ChromeDriver,从官方网站下载,然后解压缩并保存路径。


from selenium import webdriver

driver_path = "C:/webdriver/chromedriver.exe"  # 替换为您的路径
driver = webdriver.Chrome(driver_path)
driver.get("https://google.com")




定义抓取数据的函数

刮擦 Spotify 播放列表时,您需要分析页面的 HTML 代码,并确定哪些元素包含必要的信息。让我们从 Python Spotify 播放列表搜刮开始,按照下面的指南逐步进行。

1. HTML 网页分析

在浏览器中,按 F12 键就可以看到必要元素所在的 HTML 结构。例如


<div class="tracklist-row">
    <span class="track-name">name</span>
    <span class="artist-name">artist</span>
    <span class="track-duration">3:45</span>
</div>


2.设置 Selenium

为了收集信息,我们将使用 Selenium 加载动态内容,使用 BeautifulSoup 解析 HTML。


from selenium import webdriver
import time
from bs4 import BeautifulSoup


3.从播放列表中收集数据的功能

下面是一个使用 Python 对 Spotify 进行网络搜刮的示例,它打开播放列表页面,分析 HTML 代码并提取歌曲信息。

如何使用

  1. 浏览器会打开播放列表页面。
  2. Selenium 会自动滚动页面以加载所有歌曲。
  3. BeautifulSoup 可分析 HTML 代码,并按类找到必要的元素。
  4. 提取有关曲目标题、艺术家和持续时间的信息。

def get_spotify_playlist_data(playlist_url):
   # 通过 Selenium 启动浏览器 
   options = webdriver.ChromeOptions()
   options.add_argument("--headless")  # 在无头模式下运行(无浏览器窗口)
   driver = webdriver.Chrome(options=options)

   driver.get(playlist_url)
   time.sleep(5)  # 等待页面加载

   # 滚动页面加载所有曲目
   driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

   # 获取页面的 HTML 代码
   html = driver.page_source
   driver.quit()

   soup = BeautifulSoup(html, "lxml")

   # 查找所有轨道
   tracks = []
   for track in soup.find_all(class_="IjYxRc5luMiDPhKhZVUH UpiE7J6vPrJIa59qxts4"):
       name = track.find(
           class_="e-9541-text encore-text-body-medium encore-internal-color-text-base btE2c3IKaOXZ4VNAb8WQ standalone-ellipsis-one-line").text
       artist = track.find(class_="e-9541-text encore-text-body-small").find('a').text
       duration = track.find(
           class_="e-9541-text encore-text-body-small encore-internal-color-text-subdued l5CmSxiQaap8rWOOpEpk").text

       tracks.append({"track title": name, "artist": artist, "duration": duration})

   return tracks



调用函数

要调用该函数,请将 Spotify 播放列表 URL 传递给它。函数会打开它,用 Python 搜刮 Spotify 播放列表数据,并返回歌曲名、艺术家和持续时间列表。


playlist_url = "https://open.spotify.com/album/7aJuG4TFXa2hmE4z1yxc3n?si=W7c1b1nNR3C7akuySGq_7g" 

data = get_spotify_playlist_data(playlist_url)
for track in data:
   print(track)


为 Spotify API 处理身份验证

要从 Spotify 的 API 收集信息,您需要一个令牌。这可以通过身份验证获得。没有它,您将无法向 API 发出请求。下一部分将详细介绍如何实现这一点。

1.注册应用程序

访问 Spotify Developer Dashboard,登录您的账户;如果还没有账户,请创建一个。登录后,注册应用程序,填写包含名称和描述的表格。完成后,将为您生成一个客户 ID 和客户机密。

2.获取令牌

为了获取令牌,我们将使用 Python 中的请求。


import requests
import base64

# 您的账户数据
CLIENT_ID = "client_id"
CLIENT_SECRET = "client_secret"

# Base64 编码
credentials = f"{CLIENT_ID}:{CLIENT_SECRET}"
encoded_credentials = base64.b64encode(credentials.encode()).decode()

# 发送获取令牌的请求
url = "https://accounts.spotify.com/api/token"
headers = {
    "Authorization": f"Basic {encoded_credentials}",
    "Content-Type": "application/x-www-form-urlencoded"
}
data = {"grant_type": "client_credentials"}

response = requests.post(url, headers=headers, data=data)
token = response.json().get("access_token")

print("Access Token:", token)


通过这种方式,我们会追加之前收到的信息,并以某种方式对其进行加密,以确保正确发送获取令牌的请求。这是许多应用程序接口都采用的安全措施。然后,我们发送获取令牌的请求。获取后,它将被打印到控制台。

3.提出请求

一旦拿到令牌,就可以提出申请。


artist_id = "6qqNVTkY8uBg9cP3Jd7DAH"
url = f"https://api.spotify.com/v1/artists/{artist_id}"

headers = {"Authorization": f"Bearer {token}"}

response = requests.get(url, headers=headers)
artist_data = response.json()


存储提取的数据

为了将收集到的数据保存为 JSON 格式以便进一步分析,我们将使用标准 Python 库。


playlist_url = "https://open.spotify.com/album/7aJuG4TFXa2hmE4z1yxc3n?si=W7c1b1nNR3C7akuySGq_7g"


data = get_spotify_playlist_data(playlist_url)


with open('tracks.json', 'w', encoding='utf-8') as json_file:
   json.dump(data, json_file, ensure_ascii=False, indent=4)
   print("Data saved to tracks.json")


抓取 Spotify 播放列表数据的最佳实践

遵循道德规范将简化使用 Python 搜索 Spotify 的过程。为此,请获取 Spotify 的官方 API,因为它能让您合法访问信息,而不会违反任何规则。在进行网络搜刮时,如果 API 无法满足您的所有要求,请记住节流请求率,以避免服务器压力过大。

网站的政策可在 robots.txt 中找到,因此在搜索网站前应检查该政策。此外,代理服务器也有助于防止拦截。

结论

本数据收集指南展示了 Python Spotify 搜刮示例以及正确处理搜刮过程所需的其他信息。

让我们突出重点:

  • BeautifulSoup 可分析 HTML 页面,并具有强大的信息收集功能,因此非常适合静态网站。
  • 说到需要用户交互的动态网站,Selenium 是迄今为止最好的选择。它可以自动按下按钮、滚动页面和获取动态内容。
  • 道德刮擦是有规则的。遵守这些规则可以防止有人被屏蔽或服务器超载。最好使用 Spotify API 而不是解析 HTML。

使用这些带有 Python 的 Spotify 搜刮工具,您可以轻松快速地收集必要的数据,优化音乐内容分析过程。

评论:

0 评论