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

Python3通过Ajax请求URL生成JSON文件爬取Shazam榜单方法咨询

Python3爬取Shazam多国热门歌曲榜单JSON数据实现方案

Shazam榜单数据不需要通过BeautifulSoup解析渲染后的HTML,直接调用其公开的结构化JSON接口即可获取数据,实现逻辑如下:

接口构造规则

你已找到的全球榜接口为https://www.shazam.com/shazam/v3/en-US/US/web/-/tracks/world-chart-world,所有国家/地区的Top200榜单接口遵循统一命名规则:

  • 全球榜:路径末尾固定为world-chart-world
  • 国家/地区榜:路径末尾替换为country-chart-<对应国家/地区两位ISO标准编码>
  • 示例:你提到的南非Top200榜单,对应接口为https://www.shazam.com/shazam/v3/en-US/US/web/-/tracks/country-chart-za,直接发起GET请求即可返回标准JSON格式数据,无需额外签名、鉴权参数。

提示:要获取其他国家榜单,只需替换路径中的两位ISO编码即可,例如中国对应cn、美国对应us、英国对应gb、日本对应jp,可批量生成目标接口地址。

具体实现代码

首先安装依赖库:
pip install requests

完整可运行代码:

import requests
import json
from time import sleep

# 配置待爬取的国家/地区列表,key为自定义保存名称,value为对应两位ISO编码
target_regions = {
    "全球": "",
    "南非": "za",
    "美国": "us",
    "英国": "gb",
    "日本": "jp"
}

# 模拟浏览器请求头,避免被基础反爬拦截
request_headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
    "Accept": "application/json"
}

api_base = "https://www.shazam.com/shazam/v3/en-US/US/web/-/tracks/"

for region_name, iso_code in target_regions.items():
    try:
        # 拼接对应接口地址
        if not iso_code:
            req_url = f"{api_base}world-chart-world"
        else:
            req_url = f"{api_base}country-chart-{iso_code}"
        
        resp = requests.get(req_url, headers=request_headers, timeout=15)
        resp.raise_for_status()
        chart_data = resp.json()

        # 保存为本地JSON文件
        save_path = f"shazam_top200_{region_name}.json"
        with open(save_path, "w", encoding="utf-8") as f:
            json.dump(chart_data, f, ensure_ascii=False, indent=2)
        
        print(f"{region_name}榜单数据已保存至 {save_path}")
        sleep(1) # 控制请求频率,避免触发反爬

    except Exception as e:
        print(f"爬取{region_name}榜单失败:{str(e)}")

返回数据常用字段说明

接口返回的JSON中,歌曲列表存放在tracks数组内,单条歌曲数据的核心字段:

  • rank:歌曲在榜单中的排名
  • title:歌曲名称
  • subtitle:歌手名称
  • shazamCount:该歌曲的Shazam总识别次数
  • images.coverart:歌曲封面图片地址
  • url:歌曲对应的Shazam详情页地址

注意事项

  • 请求间隔建议不低于0.5秒,短时间高频请求容易触发IP拦截
  • 若遇403错误,可尝试更换User-Agent或使用代理IP,该接口无复杂加密校验
  • 直接调用接口获取JSON的方式比解析HTML稳定性高,不会受前端页面改版影响

内容的提问来源于stack exchange,提问作者Tayla Corney

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:15:44