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

提取10年Billboard周度榜单数据出现IndexError如何解决

Billboard周榜数据提取问题修复

错误原因说明

原数据提取方式存在逻辑错误,IndexError报错由以下几个问题共同导致:

  • 未使用提前生成的周度日期列表dates,循环中始终固定用最终值start_date(2021年1月的日期)请求榜单,没有按周遍历目标时段的日期
  • 把日期遍历的索引j直接用来取单期榜单的第j个条目,单期Billboard榜单的条目数有限(通常最多100首),当j超过单期榜单的最大索引时就会触发索引越界报错
  • 额外隐含问题:代码中未导入pandas就直接使用pd别名,也会导致后续运行报错

修复后的代码

日期生成代码(原逻辑无问题,可保留)

from datetime import datetime, timedelta
start="01/01/2010" 
last="01/01/2021"
start_date=datetime.strptime(start,"%d/%m/%Y")
last_date=datetime.strptime(last,"%d/%m/%Y")
dates=[]
while start_date <= (last_date - timedelta(days=7)):
    start_date += timedelta(days=7)
    dates.append(start_date.strftime("%d/%m/%Y"))

数据提取修正代码

import billboard
import pandas as pd
import time # 可选,用于加延时避免请求限制

billresults = []
# 遍历所有目标周日期
for date_str in dates:
    # 转换为接口要求的日期格式
    query_date = datetime.strptime(date_str, "%d/%m/%Y").strftime("%Y-%m-%d")
    # 请求对应周的榜单
    chart = billboard.ChartData('jazz-songs', date=query_date)
    # 遍历当期榜单的所有歌曲
    for song in chart:
        # 可保留周日期字段方便后续数据区分
        entry = [song.title, song.artist, query_date]
        billresults.append(entry)
    # 可选:加1秒延时避免触发接口频率限制
    time.sleep(1)

# 生成结果表
billboardjazz = pd.DataFrame(data = billresults, columns = ['track_name','artist_name','week_date'])
print(billboardjazz)

补充说明

如果只需要提取每期榜单前N名,可以把遍历榜单的代码改为for song in chart[:N]:,比如取前10名就写for song in chart[:10]:。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:21:03