如何遍历Coin Market Cap API获取前5000币种数据并保存为CSV?
解决CoinMarketCap API获取前5000币种数据并保存为CSV的问题
你的代码存在几个关键问题,导致无法实现需求,以下是修正后的完整方案:
原代码问题说明
- 接口选择错误:
quotes/latest仅用于查询指定币种的报价,无法批量获取排名靠前的币种,应使用cryptocurrency/listings/latest接口。 - 参数配置无效:
slug参数不能填**,且该接口无需指定单个币种,而是通过分页参数批量获取数据。 - 响应处理错误:直接遍历
response对象是错误的,需先将响应解析为JSON格式后处理数据。 - 缺少分页逻辑:接口默认每页返回100条数据,获取5000条需循环请求50页。
- 缺少CSV保存逻辑:没有将收集的数据写入文件的代码。
完整实现代码
import requests import pandas as pd # 替换为你的CoinMarketCap API密钥 API_KEY = "你的API密钥" # 用于获取排名币种列表的API接口 API_URL = "https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest" headers = { "Accepts": "application/json", "X-CMC_PRO_API_KEY": API_KEY } # 存储所有币种数据的列表 all_crypto_data = [] # 分页获取前5000条数据(每页100条,共50页) for page_num in range(1, 51): params = { "start": (page_num - 1) * 100 + 1, # 每页起始位置 "limit": 100, # 每页条数 "convert": "USD" # 转换为美元计价 } # 发送API请求 response = requests.get(API_URL, headers=headers, params=params) response_data = response.json() # 检查请求是否成功 if response_data["status"]["error_code"] != 0: print(f"第{page_num}页请求失败: {response_data['status']['error_message']}") continue # 提取需要的字段并添加到列表 for coin in response_data["data"]: all_crypto_data.append({ "slug": coin["slug"], "price_usd": coin["quote"]["USD"]["price"], "volume_24h_usd": coin["quote"]["USD"]["volume_24h"], "volume_change_24h_percent": coin["quote"]["USD"]["volume_change_24h"] }) print(f"已完成第{page_num}页数据获取") # 将数据转换为DataFrame并保存为CSV crypto_df = pd.DataFrame(all_crypto_data) crypto_df.to_csv("top_5000_cryptos.csv", index=False) print("数据已成功保存到top_5000_cryptos.csv")
代码关键点解释
- 接口选择:
listings/latest接口专门用于获取按市值排名的币种列表,支持分页和法币转换参数。 - 分页处理:通过
start和limit参数控制每页数据范围,循环50次即可获取5000条数据。 - 字段提取:从响应的
data数组中提取你需要的slug、美元价格、24小时成交量及成交量变化百分比。 - 错误处理:检查响应的错误码,避免因请求失败导致程序中断。
- CSV保存:使用pandas将数据转换为DataFrame后保存为CSV,方便后续直接读取进行数据分析。
内容的提问来源于stack exchange,提问作者BGX
相关产品推荐
相关产品推荐

