如何使用pycoingecko获取所有加密货币的全量市场数据
从CoinGecko拉取全量加密货币市场数据的解决方案
cg.get_coins_markets仅返回前250条数据是因为接口默认开启分页,单页最大返回条数上限为250,不需要额外调用其他接口,利用分页参数循环拉取所有有效页码即可拿到全量数据。
实现步骤
- 核心逻辑:调用
get_coins_markets时传入page(页码,从1开始计数)和per_page(单页返回条数,固定设为最大值250减少请求次数)参数,循环拉取直到接口返回空列表,说明已无更多数据。 - 需添加请求延迟,避免触发CoinGecko免费API的频率限制(免费版限流为每分钟10-30次,触发限流会返回429错误,甚至临时封禁IP)。
可直接运行的代码示例
from pycoingecko import CoinGeckoAPI import time import pandas as pd # 可选,用于结构化存储数据 # 初始化客户端 cg = CoinGeckoAPI() all_market_data = [] current_page = 1 per_page = 250 # 单页最大返回量,固定设为上限值 while True: print(f"正在拉取第{current_page}页数据") try: # 可按需修改vs_currency为你需要的计价货币,比如cny、eur等 page_data = cg.get_coins_markets( vs_currency="usd", page=current_page, per_page=per_page ) # 当前页返回空说明所有数据拉取完成,退出循环 if not page_data: break all_market_data.extend(page_data) current_page += 1 # 请求延迟,可根据实际限流情况调整,免费版建议不低于1秒 time.sleep(1.5) except Exception as e: print(f"拉取第{current_page}页出错,错误信息:{e}") # 出错后延长等待时间再重试,避免触发更严格的限流 time.sleep(10) print(f"拉取完成,共获取{len(all_market_data)}条币种市场数据") # 可选:导出为CSV文件方便后续处理 # df = pd.DataFrame(all_market_data) # df.to_csv("coingecko全量市场数据.csv", index=False, encoding="utf-8-sig")
注意事项
- 拉取完成后可以和
cg.get_coins_list()返回的总币种数量做对比,如果差距过大说明有漏页,可调整重试逻辑补拉缺失页码的数据。 - 可以按需给
get_coins_markets添加其他支持的参数,比如sparkline=True返回K线数据、order="market_cap_desc"按市值排序等。 - 如果需要更高的请求频率,可以申请CoinGecko的付费API接口,调整代码中的延迟参数即可。
内容的提问来源于stack exchange,提问作者cdotw
相关产品推荐
相关产品推荐

