要爬取任何網頁資料,首先要先搞清楚該網頁資料的產生方式 - 靜態或動態,許多網站是藉由 API 方式,依據使用者查詢條件產生特定資料,譬如:股票代號、查詢日期等
Yahoo 財經就是此類方式,所以想爬取 Yahoo 財經網站 (Finance Yahoo) 的資料,第一步是先找到正確的 API 網址,有經驗的人能試著自己找,現在多了一個詢問 AI 的方式
以查詢「歷史數據」為範例,網址:https://hk.finance.yahoo.com/quote/%5EVIX/history/,當查詢條件改變時,網址未動,很明顯這一定不是我們要找的真實網址 (API 網址)
方法一:使用 Chrome 開發人員工具找出 Yahoo 財經網站 API
在網站上按下 F12 叫出開發人員工具,切換到 Network / 網路頁籤,可以看到該網頁在網路上傳送及接收的所有資訊,有些網頁很單純,很容易找,Yahoo 網站是屬於資料超多不好找的那種,不過也還好,可以透過搜尋關鍵字試著找到 API 網址
Finance Yahoo API URL: https://query1.finance.yahoo.com/v8/finance/chart/%5EVIX?period1=1609459200&period2=1640995200&interval=1d
https://query1.finance.yahoo.com/v8/finance/chart/{股票代號}?period1={開始時間}&period2={結束時間}&interval={間隔}
1. **使用時間範圍參數 (推薦):**
https://query1.finance.yahoo.com/v8/finance/chart/%5EVIX?period1=1609459200&period2=1640995200&interval=1d
2. **使用相對範圍參數:**
https://query1.finance.yahoo.com/v8/finance/chart/%5EVIX?range=1y&interval=1d
方法二:問 AI - 使用 Claude Sonnet 4.5
Yahoo Finance 歷史股價 API 格式
基本格式:
參數說明
- 股票代號:
%5EVIX(^VIX 的 URL 編碼) - period1/period2: Unix 時間戳記(秒)
- range: 相對時間範圍
1d= 1天5d= 5天1mo= 1個月3mo= 3個月6mo= 6個月1y= 1年2y= 2年5y= 5年max= 所有資料
- interval: 資料間隔
1m= 1分鐘5m= 5分鐘1h= 1小時1d= 1天1wk= 1週1mo= 1個月
回傳資料結構
API 會回傳 JSON 格式,主要資料位於:
chart.result[0].timestamp- 時間戳記陣列chart.result[0].indicators.quote[0].open- 開盤價chart.result[0].indicators.quote[0].high- 最高價chart.result[0].indicators.quote[0].low- 最低價chart.result[0].indicators.quote[0].close- 收盤價chart.result[0].indicators.quote[0].volume- 成交量
