You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Spotify全球史上播放量Top1000+歌曲数据?

获取Spotify全球高播放量歌曲列表(1000+条目)的可行方案

一、基于Spotify Web API的间接实现思路

SpotiPy确实没有直接提供全量播放量排序的接口,但可以通过搜索+批量数据拉取的方式间接获取高播放量歌曲池:

  • 先按流派、年代等维度批量抓取种子歌曲:比如遍历pop/rock/hip-hop等主流流派,结合2000-2025年的时间范围,用API的搜索接口每次拉取50条结果(API单请求上限)
  • 对每首歌曲调用tracks/{id}接口获取popularity字段:这个字段是Spotify基于近期播放数据计算的综合热度评分,虽不是绝对历史总播放量,但和总播放量高度正相关,是目前官方API能拿到的最接近指标
  • 把抓取到的歌曲存入本地数据库(比如SQLite)自动去重,最后按popularity排序筛选出前2000条

示例Python代码片段:

import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
import sqlite3
import time

# 初始化API客户端
client_credentials_manager = SpotifyClientCredentials(client_id='你的客户端ID', client_secret='你的客户端密钥')
sp = spotipy.Spotify(client_credentials_manager=client_credentials_manager)

# 定义遍历维度
genres = ['pop', 'rock', 'hip-hop', 'electronic', 'r-n-b', 'country']
years = range(2000, 2025)

# 初始化本地数据库
conn = sqlite3.connect('spotify_highplay_tracks.db')
cursor = conn.cursor()
cursor.execute('''CREATE TABLE IF NOT EXISTS tracks
                  (id TEXT PRIMARY KEY, name TEXT, artist TEXT, popularity INTEGER)''')

# 批量抓取数据
for genre in genres:
    for year in years:
        try:
            results = sp.search(q=f'genre:{genre} year:{year}', type='track', limit=50)
            for item in results['tracks']['items']:
                track_id = item['id']
                track_name = item['name']
                artist_name = item['artists'][0]['name']
                popularity = item['popularity']
                # 插入数据库,自动跳过重复条目
                cursor.execute('INSERT OR IGNORE INTO tracks VALUES (?, ?, ?, ?)',
                              (track_id, track_name, artist_name, popularity))
            conn.commit()
            time.sleep(1)  # 规避API速率限制
        except Exception as e:
            print(f"抓取失败:{e}")
            time.sleep(5)

# 导出前2000条高热度歌曲
cursor.execute('SELECT * FROM tracks ORDER BY popularity DESC LIMIT 2000')
top_tracks = cursor.fetchall()

# 保存为CSV文件
import csv
with open('top_2000_spotify_tracks.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    writer.writerow(['歌曲ID', '歌曲名', '歌手', '热度评分'])
    writer.writerows(top_tracks)

conn.close()

二、获取精确总播放量的补充方案

如果需要绝对历史总播放量,官方API无法直接提供,可尝试:

  • 合规爬取第三方音乐统计平台的公开榜单:部分平台会整理大量歌曲的播放量数据,爬取时需遵守网站robots.txt协议,避免触发反爬机制
  • 使用公开数据集:比如一些数据社区分享的Spotify历史播放量数据集,可在此基础上结合API补充最新数据

三、关键注意事项

  • API调用有速率限制,必须加入延迟避免账号被封禁
  • popularity是实时动态字段,若需要固定的历史排名,需定期抓取存档
  • 爬取第三方网站时,务必遵守其服务条款,避免法律风险

内容的提问来源于stack exchange,提问作者Identic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 20:01:55