如何爬取Spotify Charts城市周榜的歌曲数据?
解决Spotify城市周榜数据爬取问题
你的问题出在页面歌曲数据是动态加载的:直接用requests获取的只是页面的静态框架,实际榜单数据是浏览器加载页面后通过异步请求获取的,所以静态HTML里没有歌曲信息。下面提供两种可行的解决方法:
方法1:直接调用数据接口(推荐)
Spotify Charts的实际数据是通过API接口返回的,你可以通过浏览器开发者工具找到这个接口:
- 打开目标榜单页面,按F12打开开发者工具,切换到「Network」标签
- 刷新页面,筛选「XHR/Fetch」类型的请求,找到包含
api/charts/view路径的请求 - 复制该请求的URL,直接用
requests请求即可拿到JSON格式的完整数据
示例代码:
import requests # 替换为你找到的API接口URL,注意是api路径而非页面路径 api_url = 'https://charts.spotify.com/api/charts/view/citytoptrack-barcelona-weekly/2024-02-29' response = requests.get(api_url) chart_data = response.json() # 提取并打印歌曲信息 for track in chart_data['tracks']: print(f"排名:{track['rank']}") print(f"歌曲名:{track['trackName']}") print(f"歌手:{track['artists']}") print(f"播放量:{track['streams']}") print("---")
方法2:用Selenium模拟浏览器渲染
如果找不到接口或接口有反爬限制,可以用Selenium模拟浏览器加载完整页面后提取数据:
- 先安装依赖:
pip install selenium - 下载对应浏览器的驱动(比如ChromeDriver),并配置好路径
示例代码:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service import time # 初始化Chrome驱动,替换为你的ChromeDriver路径 service = Service('chromedriver.exe') # Windows系统,Mac/Linux请调整路径 driver = webdriver.Chrome(service=service) # 打开目标页面 driver.get('https://charts.spotify.com/charts/view/citytoptrack-barcelona-weekly/2024-02-29') time.sleep(3) # 等待页面加载完成 # 提取榜单数据 track_rows = driver.find_elements(By.CSS_SELECTOR, '.chart-table-row') for row in track_rows: rank = row.find_element(By.CSS_SELECTOR, '.chart-table-position').text track_name = row.find_element(By.CSS_SELECTOR, '.chart-table-track-name').text artist = row.find_element(By.CSS_SELECTOR, '.chart-table-track-artists').text streams = row.find_element(By.CSS_SELECTOR, '.chart-table-streams').text print(f"排名:{rank} | 歌曲:{track_name} | 歌手:{artist} | 播放量:{streams}") # 关闭浏览器 driver.quit()
注意事项
- 优先使用API接口的方式,效率更高且资源消耗小
- 无论哪种方式,都不要频繁发送请求,避免触发网站的反爬机制,可适当添加请求间隔
- 使用Selenium时,注意调整等待时间,确保页面元素完全加载
内容的提问来源于stack exchange,提问作者isaacmunoz
相关产品推荐
相关产品推荐

