BNB 价格 · K线抓取 · 2020年开始 2026-10-02

简介 —— 这段 Python 脚本通过币安公开 API 获取 BNB/USDT 【这里可以修改为你想要的币种】的日线 K 线数据,用 Pandas 整理成表格,并保存为 CSV 文件。代码虽短,但涵盖了 requests 网络请求、pandas 数据清洗、matplotlib 可视化准备等核心操作。

1. 导入所需库

三个核心库:网络请求、数据处理、绘图准备。

import requests import pandas as pd import matplotlib.pyplot as plt

2. 配置币安 K 线接口

接口说明 — 币安 /api/v3/klines 返回数组列表,包含开高低收、成交量等字段。
# 币安 K线接口,1d = 日线,limit=365 取约一年数据 url = "https://api.binance.com/api/v3/klines" params = { "symbol": "BNBUSDT", "interval": "1d", "limit": 10 }

3. 发送请求 & 获取数据

resp = requests.get(url, params=params) data = resp.json()

resp.json() 将返回的 JSON 数据解析为 Python 列表。

4. 转换为 DataFrame

币安返回的每个元素是一个包含 12 个字段的数组,需要手动指定列名。
# 币安返回的是数组列表,转成 DataFrame df = pd.DataFrame(data, columns=[ "OpenTime", "Open", "High", "Low", "Close", "Volume", "CloseTime", "QuoteVolume", "Trades", "TakerBuyBase", "TakerBuyQuote", "Ignore" ])

5. 数据类型处理

将时间戳转换为可读日期,将价格、成交量转为浮点数。

# 处理数据类型 df["Date"] = pd.to_datetime(df["OpenTime"], unit="ms") df["Close"] = df["Close"].astype(float) df["Open"] = df["Open"].astype(float) df["High"] = df["High"].astype(float) df["Low"] = df["Low"].astype(float) df["Volume"] = df["Volume"].astype(float) df = df.set_index("Date")

6. 选取需要的列 & 保存 CSV

# 只保留需要的列 df = df[["Open", "High", "Low", "Close", "Volume"]] # ---------- 保存 CSV ---------- df.to_csv("bnb_daily.csv", encoding="utf-8-sig") print("✅ 已保存到 btc_daily.csv") # 注意:原文写的是 btc_daily.csv,保留原注释
提示 — encoding="utf-8-sig" 确保中文/表情符号在 Excel 中正常显示。

7. 打印数据预览

print("=== 前5天 ===") print(df.head()) print("\n=== 最近5天 ===") print(df.tail()) print("\n=== 统计概览 ===") print(df.describe())

完整代码

import requests import pandas as pd import matplotlib.pyplot as plt # 币安 K线接口,1d = 日线,limit=365 取约一年数据 url = "https://api.binance.com/api/v3/klines" params = { "symbol": "BNBUSDT", "interval": "1d", "limit": 10 #目前此代码只能抓取1000条数据,想要更多的数据,看另一份代码 } resp = requests.get(url, params=params) data = resp.json() # 币安返回的是数组列表,转成 DataFrame df = pd.DataFrame(data, columns=[ "OpenTime", "Open", "High", "Low", "Close", "Volume", "CloseTime", "QuoteVolume", "Trades", "TakerBuyBase", "TakerBuyQuote", "Ignore" ]) # 处理数据类型 df["Date"] = pd.to_datetime(df["OpenTime"], unit="ms") df["Close"] = df["Close"].astype(float) df["Open"] = df["Open"].astype(float) df["High"] = df["High"].astype(float) df["Low"] = df["Low"].astype(float) df["Volume"] = df["Volume"].astype(float) df = df.set_index("Date") # 只保留需要的列 df = df[["Open", "High", "Low", "Close", "Volume"]] # ---------- 保存 CSV ---------- df.to_csv("bnb_daily.csv", encoding="utf-8-sig") print("✅ 已保存到 btc_daily.csv") print("=== 前5天 ===") print(df.head()) print("\n=== 最近5天 ===") print(df.tail()) print("\n=== 统计概览 ===") print(df.describe())

关键点总结

使用 requests 获取实盘数据
pd.DataFrame 指定列名
毫秒时间戳转日期索引
保存为 bnb_daily.csv
为 matplotlib 绘图预留数据
保留所有原始注释