使用R爬取Spotify Top 200流媒体数据遇问题求助
解决Spotify Top 200榜单爬取问题
一、当前是否仍可爬取?
可以爬取,Spotify榜单页面仅更新了前端结构,未完全禁止静态爬取(注意控制请求频率,避免被限制访问)。
二、调整后的爬取方案(R脚本)
1. 所需依赖包
先安装并加载核心工具包:
install.packages(c("rvest", "dplyr", "purrr")) library(rvest) library(dplyr) library(purrr)
2. 单日期单地区爬取示例
以全球每日最新榜单为例,适配新页面的HTML结构:
# 目标URL(格式参考:https://charts.spotify.com/charts/view/regional-{地区代码}-daily-{YYYY-MM-DD},可替换指定日期/地区) url <- "https://charts.spotify.com/charts/view/regional-global-daily/latest" # 读取并解析页面 page <- read_html(url) spotify_data <- page %>% html_element(".chart-table") %>% html_table(header = TRUE) %>% as_tibble() # 查看结果 head(spotify_data)
3. 批量爬取(跨多年、多地区)
(1)生成日期序列
示例生成2023年1月1日至1月7日的日期:
start_date <- as.Date("2023-01-01") end_date <- as.Date("2023-01-07") date_sequence <- seq(start_date, end_date, by = "day") date_str <- format(date_sequence, "%Y-%m-%d")
(2)定义目标地区代码
可根据需求添加更多地区,比如全球(global)、美国(us)、英国(gb):
regions <- c("global", "us", "gb")
(3)批量爬取函数
scrape_spotify_charts <- function(region, date_str) { # 构造目标URL url <- paste0("https://charts.spotify.com/charts/view/regional-", region, "-daily-", date_str) # 防反爬延迟 Sys.sleep(2) tryCatch({ page <- read_html(url) data <- page %>% html_element(".chart-table") %>% html_table(header = TRUE) %>% as_tibble() %>% mutate(Region = region, Date = date_str) return(data) }, error = function(e) { message(paste("爬取失败:", region, date_str, ",错误信息:", e$message)) return(tibble()) }) } # 执行批量爬取 all_data <- cross_df(list(Region = regions, Date = date_str)) %>% rowwise() %>% mutate(data = list(scrape_spotify_charts(Region, Date))) %>% unnest(data)
三、关键调整说明
旧指南依赖的HTML节点已失效,当前榜单数据统一在class为"chart-table"的表格中,直接用html_element(".chart-table")即可定位到核心数据区域。
四、注意事项
- 控制请求间隔(建议2-3秒/次),避免触发Spotify的反爬限制
- 部分早期历史榜单可能已被移除,爬取时会返回空数据,需做好异常捕获
- 若后续页面再次更新,可通过浏览器开发者工具(F12→元素面板)重新定位表格节点
内容的提问来源于stack exchange,提问作者Thompo2106
相关产品推荐
相关产品推荐

