首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 即時抓取 Yahoo Finance 股價報價實作

     編輯:PHP 相關知識

核心策略:HTML 解析提取關鍵資料區塊

Yahoo Finance 個股頁面 (https://finance.yahoo.com/q?s=SYMBOL&d=t) 含有報價表格,透過特徵標籤 rowspan=3 定位起始行,至 ichart.yahoo.com 圖表連結結束。

完整函數 getYahooQuote()

<?php
function getYahooQuote($symbol = "CCR") {
    $url = "https://finance.yahoo.com/q?s=$symbol&d=t";
    $fp = @fopen($url, 'r');
    if (!$fp) return "無法連線";

    $capture = false;
    $html = '';
    while (!feof($fp)) {
        $line = fgets($fp, 4096);
        if (strpos($line, 'rowspan=3') !== false) $capture = true;
        if ($capture) {
            // 移除行首雜訊
            if (strpos($line, '{') !== false) {
                $pos = strrpos($line, '<');
                $line = substr($line, $pos);
            }
            $html .= $line;
            if (strpos($line, "ichart.yahoo.com/v?s=$symbol") !== false) break;
            if (strpos($line, '
') !== false) break; // 保險結束 } } fclose($fp); echo $html; // 直接輸出含格式的報價片段 } // 批次抓取範例 $symbols = ['CCR', 'IIXL', 'SAPE', 'WBVN']; foreach ($symbols as $sym) { echo "$sym
"; getYahooQuote($sym); } ?>

關鍵技術細節

  • 特徵定位:rowspan=3 為報價表格起始標記,ichart.yahoo.com 為結束標記
  • 容錯處理:@fopen 抑制警告,feof 迴圈防無限讀取
  • 編碼:Yahoo 早期頁面為 ISO-8859-1,中文環境需 iconv() 轉碼
  • 效能:循序抓取較慢,生產環境建議 cURL 多執行緒或快取 1-5 分鐘

現代化遷移建議

  1. 改用 Yahoo Finance API (若可用) 或 Alpha Vantage / Twelve Data 等結構化 API
  2. 採用 DOMDocument + XPath 替代字串搜尋,抗版面變更能力強
  3. 加入 Redis/Memcached 快取層,降低對外部依賴與頻率限制風險
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved