溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python怎么爬取股票交易數據并可視化展示

發布時間:2021-12-01 15:09:28 來源:億速云 閱讀:311 作者:iii 欄目:開發技術
# 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")
  1. Tushare Pro
    國內股票數據接口(需注冊):

    import tushare as ts
    ts.set_token('your_token')
    pro = ts.pro_api()
    df = pro.daily(ts_code='600519.SH')
    
  2. AKShare
    開源金融數據接口:

    import akshare as ak
    stock_zh = ak.stock_zh_a_daily(symbol="sh600519")
    

2.2 付費API對比

服務商 特點 費用區間
Alpha Vantage 全球數據,API限制 免費/月$49
Wind 機構級數據 年費10萬+
同花順i問財 中文場景優化 按需購買

三、爬蟲實戰:以新浪財經為例

3.1 網頁分析

通過瀏覽器開發者工具(F12)分析請求: - 數據接口:https://finance.sina.com.cn/realstock/company/sh600519/nc.shtml - 實際數據通過AJAX請求獲取,真實API地址可在XHR中查找

3.2 代碼實現

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"))

3.3 反爬應對策略

  1. 隨機User-Agent輪換
  2. 使用代理IP池(如快代理服務)
  3. 設置合理爬取間隔(建議≥3秒)

四、數據清洗與存儲

4.1 使用Pandas處理數據

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()

4.2 數據存儲方案

  1. CSV文件

    df.to_csv("stock_data.csv", index=False)
    
  2. 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')
    
  3. MongoDB

    from pymongo import MongoClient
    client = MongoClient('mongodb://localhost:27017/')
    db = client['stock']
    db['apple'].insert_many(df.to_dict('records'))
    

五、可視化展示

5.1 基礎K線圖(Matplotlib)

import mplfinance as mpf

# 需要將日期設為索引
df = df.set_index('Date')
mpf.plot(df, type='candle', mav=(5,20), volume=True)

5.2 交互式圖表(Plotly)

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()

5.3 技術指標可視化

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')

六、完整案例:A股分析儀表盤

6.1 數據獲取

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')

6.2 使用Dash構建Web儀表盤

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)

七、注意事項與法律風險

  1. 合規性

    • 避免高頻訪問(超過100次/分鐘可能觸發封禁)
    • 商業用途需購買正版數據授權
  2. 數據質量

    • 檢查缺失值:df.isnull().sum()
    • 處理異常值:df = df[(df['volume'] > 0)]
  3. 緩存策略
    使用requests_cache減少重復請求:

    import requests_cache
    requests_cache.install_cache('stock_cache')
    

八、擴展方向

  1. 量化交易策略
    結合backtrader庫進行策略回測:

    import backtrader as bt
    class MyStrategy(bt.Strategy):
       def next(self):
           if self.data.close[0] > self.data.ma[0]:
               self.buy()
    
  2. 預測模型
    使用Prophet進行價格預測:

    from prophet import Prophet
    model = Prophet(daily_seasonality=True)
    model.fit(df[['Date','Close']].rename(columns={'Date':'ds','Close':'y'}))
    
  3. 實時監控系統
    通過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渲染略有差異)

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女