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

如何通过Spotipy API获取超过50条Spotify歌曲记录?

如何通过Spotipy API获取指定搜索条件下的全部歌曲记录?

我正在使用Spotipy API从Spotify获取歌曲数据,当前代码单次最多返回50条记录,想知道是否可以通过分块请求的方式获取该搜索条件下的全部记录?

当前代码如下:

import pandas as pd
import spotipy
from spotipy.oauth2 import SpotifyClientCredentials

sp = spotipy.Spotify(auth_manager=SpotifyClientCredentials(client_id='<my_client_id>',
                                                           client_secret='<my_client_secret'))

results = sp.search(q="artist:guns n' roses", limit=50)

d = []
for idx, track in enumerate(results['tracks']['items']):
    d.append (
        {
            'Track' : track['name'],
            'Album' : track['album']['name'],
            'Artist' : track['artists'][0]['name'],
            'Release Date' : track['album']['release_date'],            
            'Track Number' : track['track_number'],
            'Popularity' : track['popularity'],
            'Explicit' : track['explicit'],
            'Duration' : track['duration_ms'],
            'Audio Preview URL' : track['preview_url'],
            'Album URL' : track['album']['external_urls']['spotify']
        }
    )

pd.DataFrame(d)

可以通过分页请求实现,Spotify Search API支持offset参数指定从第几条记录开始返回结果,结合limit(最大50)就能分批次获取所有符合条件的记录。需要注意:Spotify Search API最多返回1000条结果,超出部分无法获取。

修改后的代码示例:

import pandas as pd
import spotipy
from spotipy.oauth2 import SpotifyClientCredentials

sp = spotipy.Spotify(auth_manager=SpotifyClientCredentials(client_id='<my_client_id>',
                                                           client_secret='<my_client_secret>'))

# 初始化参数
query = "artist:guns n' roses"
limit = 50
offset = 0
all_tracks = []

while True:
    results = sp.search(q=query, limit=limit, offset=offset)
    tracks = results['tracks']['items']
    
    # 当前请求无返回歌曲时终止循环
    if not tracks:
        break
    
    # 处理当前批次歌曲数据
    for track in tracks:
        all_tracks.append({
            'Track' : track['name'],
            'Album' : track['album']['name'],
            'Artist' : track['artists'][0]['name'],
            'Release Date' : track['album']['release_date'],            
            'Track Number' : track['track_number'],
            'Popularity' : track['popularity'],
            'Explicit' : track['explicit'],
            'Duration' : track['duration_ms'],
            'Audio Preview URL' : track['preview_url'],
            'Album URL' : track['album']['external_urls']['spotify']
        })
    
    # 更新偏移量,准备下一次请求
    offset += limit
    
    # 达到API最大返回数时提前终止,避免无效请求
    if offset >= 1000:
        break

# 转为DataFrame
df = pd.DataFrame(all_tracks)
print(df.shape)

关键说明:

  • offset参数:每次请求从offset位置取limit条数据,循环后offset累加limit。
  • 终止条件:请求返回的items为空,或offset达到1000时停止循环。
  • 可选去重:若需避免重复歌曲,可根据track['id']字段做去重处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:46:00