如何获取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
相关产品推荐
相关产品推荐

