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

如何自动化抓取Coincodex网站图表历史数据用于模型训练?

可行的数据采集方案

方案一:基于网页渲染的爬虫(解决动态加载数据问题)

目标网站的图表数据大概率是前端动态渲染的,直接请求API会遇到验证或密钥限制,用浏览器自动化工具模拟页面加载,能直接提取渲染完成的图表数据。

步骤示例(用Playwright):

  1. 安装依赖:
pip install playwright pandas
playwright install firefox
  1. 采集代码:
from playwright.sync_api import sync_playwright
import pandas as pd

def scrape_coincodex_market_cap():
    with sync_playwright() as p:
        browser = p.firefox.launch(headless=True)
        page = browser.new_page(user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0")
        page.goto("https://coincodex.com/market-cap/")
        
        # 等待图表容器加载完成,可根据页面实际情况调整超时时间
        page.wait_for_selector("#chart-container", timeout=10000)
        
        # 执行JS提取页面存储的图表数据,需先通过浏览器控制台确认数据存储变量
        chart_data = page.evaluate("""
            return window.chartData || [];
        """)
        
        browser.close()
        
        # 转换为DataFrame保存
        df = pd.DataFrame(chart_data)
        return df

# 调用并导出数据
market_cap_df = scrape_coincodex_market_cap()
market_cap_df.to_csv("coincodex_market_cap_history.csv", index=False)

注意事项:

  • 要通过浏览器开发者工具确认页面中存储图表数据的变量名和DOM结构,再调整代码里的选择器和JS逻辑。
  • 添加随机延时,避免短时间内频繁请求触发反爬机制。

方案二:完善API请求参数与头信息(绕过基础验证)

直接调用API失败,大概率是请求头或参数不全,网站通过这些字段验证请求合法性。

调整后的请求示例:

import requests
import pandas as pd
import time

def get_coincodex_data():
    url = "https://coincodex.com/api/v1/assets/get_charts"
    # 用当前时间戳替换固定的t参数,该参数大概率是请求校验用的时间标识
    t = str(int(time.time()))
    params = {
        'charts': 'ALL',
        'samples': 'md',
        'assets': 'SUM_ALL_COINS',
        'include': 'market_cap',
        't': t
    }
    # 从浏览器开发者工具复制完整的请求头,包括Cookie、Referer等
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0',
        'Referer': 'https://coincodex.com/market-cap/',
        'Cookie': '替换为浏览器中实际的Cookie值',
        'Accept': 'application/json, text/plain, */*'
    }
    
    response = requests.get(url, params=params, headers=headers)
    if response.status_code == 200:
        data = response.json()
        # 根据API返回的JSON结构调整数据提取路径
        df = pd.DataFrame(data.get('data', []))
        return df
    else:
        print(f"请求失败,状态码:{response.status_code}")
        return None

# 调用并保存数据
data_df = get_coincodex_data()
if data_df is not None:
    data_df.to_csv("market_cap_data.csv", index=False)

注意事项:

  • Cookie可能会过期,需要定期从浏览器中更新;若网站需要登录才能获取完整数据,还需模拟登录流程。
  • 若API参数存在签名验证,该方案会失效,此时优先选择方案一。

方案三:利用网站原生导出功能(最稳定合规)

先检查目标页面是否有数据导出按钮(比如CSV、Excel格式),若存在,直接模拟点击导出按钮下载数据,这种方式完全符合网站使用规则,稳定性最高。


内容的提问来源于stack exchange,提问作者Radosław Gajewski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 19:42:48