您好,登录后才能下订单哦!
# Python怎么爬取股票交易数据并可视化展示
## 一、前言
在金融数据分析领域,获取实时或历史的股票交易数据并进行可视化分析是量化投资、市场研究的重要基础。Python凭借其丰富的第三方库(如`requests`、`pandas`、`matplotlib`等),成为实现这一目标的理想工具。本文将详细介绍如何使用Python爬取股票数据,并通过可视化技术展示关键指标。
---
## 二、数据获取途径
### 2.1 免费数据源
1. **Yahoo Finance API**
通过`yfinance`库可直接获取全球多交易所数据:
```python
import yfinance as yf
data = yf.download("AAPL", start="2023-01-01", end="2023-12-31")
Tushare Pro
国内股票数据接口(需注册):
import tushare as ts
ts.set_token('your_token')
pro = ts.pro_api()
df = pro.daily(ts_code='600519.SH')
AKShare
开源金融数据接口:
import akshare as ak
stock_zh = ak.stock_zh_a_daily(symbol="sh600519")
服务商 | 特点 | 费用区间 |
---|---|---|
Alpha Vantage | 全球数据,API限制 | 免费/月$49 |
Wind | 机构级数据 | 年费10万+ |
同花顺i问财 | 中文场景优化 | 按需购买 |
通过浏览器开发者工具(F12)分析请求:
- 数据接口:https://finance.sina.com.cn/realstock/company/sh600519/nc.shtml
- 实际数据通过AJAX请求获取,真实API地址可在XHR中查找
import requests
import pandas as pd
from fake_useragent import UserAgent
def get_sina_stock(code):
url = f"http://hq.sinajs.cn/list={code}"
headers = {"User-Agent": UserAgent().random}
response = requests.get(url, headers=headers)
data = response.text.split(",")
return {
"名称": data[0].split('"')[1],
"开盘价": float(data[1]),
"收盘价": float(data[3]),
"最高价": float(data[4]),
"最低价": float(data[5]),
"成交量": int(data[8])
}
# 示例:获取贵州茅台实时数据
print(get_sina_stock("sh600519"))
import pandas as pd
# 示例:处理Yahoo Finance数据
df = yf.download("AAPL", period="1y")
df = df.reset_index()
# 计算移动平均线
df['MA5'] = df['Close'].rolling(5).mean()
df['MA20'] = df['Close'].rolling(20).mean()
CSV文件
df.to_csv("stock_data.csv", index=False)
MySQL数据库
from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://user:pass@localhost/stock_db')
df.to_sql('apple_data', con=engine, if_exists='replace')
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
db = client['stock']
db['apple'].insert_many(df.to_dict('records'))
import mplfinance as mpf
# 需要将日期设为索引
df = df.set_index('Date')
mpf.plot(df, type='candle', mav=(5,20), volume=True)
import plotly.graph_objects as go
fig = go.Figure(data=[go.Candlestick(
x=df.index,
open=df['Open'],
high=df['High'],
low=df['Low'],
close=df['Close']
)])
fig.update_layout(title='Apple Stock Price')
fig.show()
import talib
# 计算MACD
df['MACD'], df['Signal'], _ = talib.MACD(df['Close'])
# 绘制双坐标轴图表
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12,8))
ax1.plot(df['Close'], label='Price')
ax1.plot(df['MA5'], label='5日均线')
ax2.plot(df['MACD'], label='MACD', color='red')
ax2.plot(df['Signal'], label='Signal', color='blue')
def get_a_stock():
stock_df = ak.stock_zh_a_daily(symbol="sh600519")
# 添加基本面数据
basic_df = ak.stock_financial_report_sina(stock="600519", symbol="现金流量表")
return pd.merge(stock_df, basic_df, on='date')
import dash
from dash import dcc, html
app = dash.Dash()
app.layout = html.Div([
dcc.Graph(id='kline-chart'),
dcc.Dropdown(
id='stock-selector',
options=[{'label': '茅台', 'value': '600519'}]
)
])
if __name__ == '__main__':
app.run_server(debug=True)
合规性
数据质量
df.isnull().sum()
df = df[(df['volume'] > 0)]
缓存策略
使用requests_cache
减少重复请求:
import requests_cache
requests_cache.install_cache('stock_cache')
量化交易策略
结合backtrader库进行策略回测:
import backtrader as bt
class MyStrategy(bt.Strategy):
def next(self):
if self.data.close[0] > self.data.ma[0]:
self.buy()
预测模型
使用Prophet进行价格预测:
from prophet import Prophet
model = Prophet(daily_seasonality=True)
model.fit(df[['Date','Close']].rename(columns={'Date':'ds','Close':'y'}))
实时监控系统
通过APScheduler实现定时任务:
from apscheduler.schedulers.blocking import BlockingScheduler
def job():
print(get_sina_stock("sh600519"))
scheduler = BlockingScheduler()
scheduler.add_job(job, 'interval', hours=1)
本文系统介绍了从数据获取到可视化的完整流程,关键要点包括: 1. 优先选择稳定的官方API 2. 爬虫需遵守robots.txt协议 3. 可视化应突出核心指标 4. 生产环境需要添加异常处理
完整项目代码可参考GitHub仓库:示例链接
注:实际代码运行时需要替换相关API密钥,市场有风险,投资需谨慎。 “`
(全文约2750字,实际字数可能因Markdown渲染略有差异)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。