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

如何解决CoinGecko API分页限制,获取全量加密货币列表?

解决方案

这类无总页数返回的分页接口拉取全量数据是非常常见的场景,有通用的实现方案,完全可以通过循环递增page参数的方式实现需求。

核心实现逻辑

  • 优先把接口允许的per_page参数设为最大值,CoinGecko的/coins/markets接口公开版per_page最大支持250,设为最大值可以大幅减少请求次数,降低触发接口限流的概率。
  • 从page=1开始循环发起请求,每次请求后对返回结果做判断:如果返回的币种列表为空,或者列表长度小于你设置的per_page值,就说明已经拉取到最后一页,直接终止循环即可。
  • 必须加限流和异常处理逻辑,公开接口普遍有请求频率限制,CoinGecko免费版接口限制为每分钟1030次请求,每次请求后可加12秒的等待延迟,遇到429限流错误时可以延长等待时间后重试。

参考实现代码

import requests
import time

base_url = "https://api.coingecko.com/api/v3/coins/markets"
params = {
    "vs_currency": "eur",
    "order": "market_cap_desc",
    "per_page": 250,
    "page": 1,
    "sparkline": "false"
}
all_coins = []

while True:
    response = requests.get(base_url, params=params)
    # 非2xx状态码直接抛出异常,可根据需要补充对应状态码的处理逻辑
    response.raise_for_status()
    current_page = response.json()
    if not current_page:
        break
    all_coins.extend(current_page)
    # 返回长度小于per_page说明已经到最后一页
    if len(current_page) < params["per_page"]:
        break
    params["page"] += 1
    # 加延迟避免触发限流
    time.sleep(1.5)

# 所有币种数据存在all_coins变量中
print(f"共获取到{len(all_coins)}条币种数据")

注意事项

  • 免费版CoinGecko API全量拉取数据容易触发限流,非必要不要高频执行全量拉取操作,建议对拉取到的结果做缓存,减少重复请求。
  • 可以根据实际请求返回的限流提示调整延迟时长,遇到429错误时可增加重试等待时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:45:05