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

Spotify每日Top200榜单爬虫无返回?如何获取歌曲信息

解决Spotify Charts每日Top200歌曲爬取问题

你的代码没返回结果,核心问题是用了动态生成的随机类名(比如Container-c1ixcy-0、krZEp这类),这类类名是前端框架自动生成的,页面更新或重新加载后就会变化,根本定位不到目标元素。

下面是可行的爬取方案,基于页面稳定的结构和语义化标签来定位:

完整实现代码

import requests
from bs4 import BeautifulSoup

# 目标页面URL
url = "https://charts.spotify.com/charts/view/regional-tr-daily/2022-09-14"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}

# 获取页面内容
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")

# 定位歌曲列表:找到表格中的所有数据行(跳过表头)
song_rows = soup.select("table tr")[1:]  # 第一个tr是表头,从第二个开始是歌曲条目

# 遍历每一行提取信息
for row in song_rows:
    # 提取歌曲名称和歌手
    song_info = row.select_one("td.chart-table-track")
    song_name = song_info.select_one("strong").get_text(strip=True)
    artist_name = song_info.select_one("span").get_text(strip=True).replace("by ", "")
    
    # 提取播放量
    streams = row.select_one("td.chart-table-streams").get_text(strip=True)
    
    print(f"歌曲:{song_name} | 歌手:{artist_name} | 播放量:{streams}")

代码说明

  • 用headers模拟浏览器请求,避免被网站拦截
  • 依赖语义化的业务类名(比如chart-table-track、chart-table-streams),这类类名是页面固定的标识,不会轻易变化
  • 通过表格行tr遍历所有歌曲,逐个提取对应单元格的内容

如果遇到实时榜单这类JS动态渲染的页面,可以改用selenium模拟浏览器加载完成后再解析。

内容的提问来源于stack exchange,提问作者Ugur Selim Ozen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:00:59