使用R爬取Discogs:无法解析Hank Mobley专辑数据求助
解决Discogs API响应解析问题:提取Hank Mobley的专辑信息
我懂你现在的困扰——成功调用Discogs API拿到了200状态码的响应,却不知道怎么从返回的内容里抠出专辑标题和年份。咱们一步步来搞定这个问题:
1. 先解析JSON格式的响应
Discogs返回的是application/json格式的数据,你需要用jsonlite包把响应内容转换成R能识别的列表/数据框。先安装并加载这个包:
install.packages("jsonlite") library(jsonlite) library(magrittr) library(httr)
2. 完整的请求与解析代码
把你的请求代码扩展一下,加入解析步骤,然后提取需要的字段:
# 发起请求 releasesHM <- httr::GET("https://api.discogs.com/artists/135872/releases") # 解析JSON响应成可操作的列表 response_data <- releasesHM %>% content(as = "text") %>% fromJSON() # 提取专辑标题和年份(从releases数组中筛选) albums <- response_data$releases %>% select(title, year) %>% filter(year != "") # 可选:过滤掉无年份的条目
3. 为什么之前看不到内容?
你之前拿到的releasesHM是httr的响应对象,不是直接的数据集。它包含了响应头、状态码和原始二进制内容,必须用content()函数提取文本内容,再转成JSON格式才能访问里面的具体字段。
4. 处理分页(可选)
Discogs API默认只返回10条结果,如果Hank Mobley的专辑不止10张,你可以通过response_data$pagination$urls$next拿到下一页的API地址,循环请求直到获取全部内容:
# 示例:简单的分页获取逻辑 all_albums <- data.frame() current_url <- "https://api.discogs.com/artists/135872/releases" while (!is.null(current_url)) { res <- GET(current_url) data <- res %>% content(as = "text") %>% fromJSON() page_albums <- data$releases %>% select(title, year) all_albums <- rbind(all_albums, page_albums) current_url <- data$pagination$urls$next }
这样你就能得到清晰的专辑标题和年份列表啦,试试上面的代码应该就能解决问题!
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

