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
相关产品推荐
相关产品推荐

