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

