如何自动化抓取Coincodex网站图表历史数据用于模型训练?
可行的数据采集方案
方案一:基于网页渲染的爬虫(解决动态加载数据问题)
目标网站的图表数据大概率是前端动态渲染的,直接请求API会遇到验证或密钥限制,用浏览器自动化工具模拟页面加载,能直接提取渲染完成的图表数据。
步骤示例(用Playwright):
- 安装依赖:
pip install playwright pandas playwright install firefox
- 采集代码:
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
相关产品推荐
相关产品推荐

