【发布时间】:2021-11-26 03:52:55
【问题描述】:
从事一个项目,在数周内抓取广告牌前 100 名,使用 Spotify 的 API 查找歌曲音频功能,并将信息保存在新的 pandas df 中。
我让它一次最多可以进行 100 次搜索(spotify api 只允许 100 个 id),但是我无法编写代码来一次迭代 100 个歌曲 id,运行 api ,并保存到新的 df 中。
以下是一次 100 个 id 搜索的工作代码:
df_import = pd.read_csv(r'xxx/Billboard_Top_100.csv')
track_id_list = []
artist_name_list = []
track_name_list = []
for item, row in df_import.head(100).iterrows():
artist = row['Artist']
track = row['Song']
try:
spotify_response = sp.search(q='artist:' + artist + ' track:' + track, type='track')
#artist name
artist_name = spotify_response['tracks']['items'][0]['artists'][0]['name']
#song name
track_name = spotify_response['tracks']['items'][0]['name']
#unique sportify track id used for audio feautre search
track_id = spotify_response['tracks']['items'][0]['uri']
#splits string to search for features
track_id_split = str.split(track_id, 'spotify:track:')
track_id_list.append(track_id_split[1])
artist_name_list.append(row['Artist'])
track_name_list.append(row['Song'])
except:
DNF_song_search = sp.search(q=track)
artist_name = DNF_song_search['tracks']['items'][0]['artists'][0]['name']
if search(artist_name, artist):
#song name
track_name = DNF_song_search['tracks']['items'][0]['name']
#unique sportify track id used for audio feautre search
track_id = DNF_song_search['tracks']['items'][0]['uri']
#splits string to search for features
track_id_split = str.split(track_id, 'spotify:track:')
track_id_list.append(track_id_split[1])
artist_name_list.append(row['Artist'])
track_name_list.append(row['Song'])
else:
print('Inconsistent artist match on: ' + artist + ' ' + artist_name + ' for song ' + track)
#spotify api to save song features based on track ids
features = sp.audio_features(track_id_list)
#save features list into pandas df
features_df = pd.DataFrame(data = features)
#add artist and song columns from imported billboard df
features_df['Artist'] = artist_name_list
features_df['Song'] = track_name_list
#combine the two dataframes
df_merged = pd.merge(df_import, features_df, on = 'Song', how = 'left')
df_merged.to_csv('merged.csv')
我尝试将所有歌曲 ID 保存到一个列表中,然后一次执行 api 100 个 ID,但是当我尝试保存到新数据帧时出现各种错误。
【问题讨论】:
-
您能否更具体地了解您遇到的各种错误?如果您包含完整的错误消息和堆栈跟踪,您将更有可能获得答案。
Billboard_Top_100.csv的示例也会有所帮助 -
对不起 - 昨天似乎是一个简单的问题有点沮丧,我的问题不是很清楚。在我澄清之前,我解决了我自己的问题。我遇到的主要问题是将从 spotify api 下载的列表对象加载到 pandas df x 次数,同时保持数据帧的完整性。我已经编辑了原始帖子以显示我的解决方案。感谢回复
-
@steezebutter 如果您找到了答案,请将其发布在答案部分并在 2 天内将其标记为正确,请勿编辑您的帖子。请阅读How to Ask、How to Answer 并查看tour
标签: python pandas list dataframe spotify