Google Finance 抓不到股價的原因及解決方法(含 Yahoo 股價抓法)

Google Finance 抓不到股價資料

的原因及解決方法

GOOGLEFINANCE() 是Google 試算表內建一個非常好用的函式,可以抓取上市股票股價及相關資訊(若你還不會使用可以參考這篇文章),然而,有時候我們可能會遇到抓不到資料的情況。本文將探討 Google Finance 抓不到資料的可能原因,並提供一些解決方法,文末也會提供 Google 試算表範本供大家參考學習。

原因一–網站維護

Google Finance 可能因為網站維護或升級而暫時關閉或限制了數據的提取功能

解決方法一

如果你遇到以上原因,這時候我們就需要利用 IMPORTXML() 從其他網站提取資訊,以下提供抓取 Yahoo Finance 股市資料寫法範例,其中的 C2 請自行換成股票代碼:
ps. 以下只是範例,如果想要深入了解怎麼樣從Yahoo Finanace 抓取資料請參考這篇文章

上市股票

  • 股價
    =importxml("https://tw.stock.yahoo.com/quote/"&C2&".TW","/html/body/div[1]/div/div/div/div/div[5]/div/div[1]/div/div[1]/div/div[2]/div[1]/div/span[1]")
  • 總量
    =importxml("https://tw.stock.yahoo.com/quote/"&C2&".TW","/html/body/div[1]/div/div/div/div/div[5]/div/div[1]/div/div[3]/div/section[1]/div[2]/div[2]/div/ul/li[10]/span[2]")
  • 本益比(同業平均)
    =importxml("https://tw.stock.yahoo.com/quote/"&C2&".TW","/html/body/div[1]/div/div/div/div/div[5]/div/div[1]/div/div[1]/div/div[2]/div[2]/div[2]/span[1]")
  • 漲跌
    =IFNA(CONCATENATE("- ",(importxml("https://tw.stock.yahoo.com/quote/"&C2&".TW","//div/section[1]/div[2]/div[2]/div/ul/li[9]/span[contains(@class,'trend-down')]"))),CONCATENATE("+ ",(importxml("https://tw.stock.yahoo.com/quote/"&C2&".TW","//div/section[1]/div[2]/div[2]/div/ul/li[9]/span[contains(@class,'trend-up')]"))))
  • 漲跌幅
    =IFNA(CONCATENATE("- ",(importxml("https://tw.stock.yahoo.com/quote/"&B2&".TW","//div/div[5]/div/div[1]/div/div[3]/div/section[1]/div[2]/div[2]/div/ul/li[8]/span[contains(@class,'trend-down')]"))),CONCATENATE("+ ",(importxml("https://tw.stock.yahoo.com/quote/"&C2&".TW","//div/div[1]/div/div[3]/div/section[1]/div[2]/div[2]/div/ul/li[8]/span[contains(@class,'trend-up')]"))))

如果想要預設使用 GOOGLEFINANCE() ,Google Finance抓不到才抓取 Yahoo 的資料的話可以加上IFERROR()的判斷,結果如下,其中的 C2 請自行換成股票代碼,直接貼上即可:

  • 股價
    =IFERROR(GOOGLEFINANCE("TPE:"&C2,"price"),importxml("https://tw.stock.yahoo.com/quote/"&C2&".TW","/html/body/div[1]/div/div/div/div/div[5]/div/div[1]/div/div[1]/div/div[2]/div[1]/div/span[1]"))
  • 總量
    =IFERROR(GOOGLEFINANCE("TPE:"&C2,"volume"),importxml("https://tw.stock.yahoo.com/quote/"&C2&".TW","/html/body/div[1]/div/div/div/div/div[5]/div/div[1]/div/div[3]/div/section[1]/div[2]/div[2]/div/ul/li[10]/span[2]"))
  • 本益比
    =IFERROR(GOOGLEFINANCE("TPE:"&C2,"pe"),importxml("https://tw.stock.yahoo.com/quote/"&C2&".TW","/html/body/div[1]/div/div/div/div/div[5]/div/div[1]/div/div[1]/div/div[2]/div[2]/div[2]/span[1]"))
  • 漲跌
    =IFERROR(GOOGLEFINANCE("TPE:"&C2,"change"),IFNA(CONCATENATE("- ",(importxml("https://tw.stock.yahoo.com/quote/"&C2&".TW","//div/section[1]/div[2]/div[2]/div/ul/li[9]/span[contains(@class,'trend-down')]"))),CONCATENATE("+ ",(importxml("https://tw.stock.yahoo.com/quote/"&C2&".TW","//div/section[1]/div[2]/div[2]/div/ul/li[9]/span[contains(@class,'trend-up')]")))))
  • 漲跌幅
    =IFERROR(GOOGLEFINANCE("TPE:"&C2,"changepct"),IFNA(CONCATENATE("- ",(importxml("https://tw.stock.yahoo.com/quote/"&C2&".TW","//div/div[5]/div/div[1]/div/div[3]/div/section[1]/div[2]/div[2]/div/ul/li[8]/span[contains(@class,'trend-down')]"))),CONCATENATE("+ ",(importxml("https://tw.stock.yahoo.com/quote/"&C2&".TW","//div/div[1]/div/div[3]/div/section[1]/div[2]/div[2]/div/ul/li[8]/span[contains(@class,'trend-up')]")))))

原因二–興櫃股票

GOOGLEFINANCE()只能抓取台灣上市股票,如果股票為上櫃/興櫃股票則會無法抓取資料。

解決方法二

上櫃股票

利用 IMPORTXML() 抓取 Yahoo Finance 上櫃股票資料時,只需將網址中的”.TW” 換成 “.TWO”,以下是範例直接用即可,其中的 B1 請自行換成股票代碼:

  • 股價
    =importxml("https://tw.stock.yahoo.com/quote/"&C2&".TWO","/html/body/div[1]/div/div/div/div/div[5]/div/div[1]/div/div[1]/div/div[2]/div[1]/div/span[1]")
  • 總量
    =importxml("https://tw.stock.yahoo.com/quote/"&C2&".TWO","/html/body/div[1]/div/div/div/div/div[5]/div/div[1]/div/div[3]/div/section[1]/div[2]/div[2]/div/ul/li[10]/span[2]")
  • 本益比(同業平均)
    =importxml("https://tw.stock.yahoo.com/quote/"&C2&".TWO","/html/body/div[1]/div/div/div/div/div[5]/div/div[1]/div/div[1]/div/div[2]/div[2]/div[2]/span[1]")
  • 漲跌
    =IFNA(CONCATENATE("- ",(importxml("https://tw.stock.yahoo.com/quote/"&C2&".TWO","//div/section[1]/div[2]/div[2]/div/ul/li[9]/span[contains(@class,'trend-down')]"))),CONCATENATE("+ ",(importxml("https://tw.stock.yahoo.com/quote/"&C2&".TWO","//div/section[1]/div[2]/div[2]/div/ul/li[9]/span[contains(@class,'trend-up')]"))))
  • 漲跌幅
    =IFNA(CONCATENATE("- ",(importxml("https://tw.stock.yahoo.com/quote/"&C2&".TWO","//div/div[5]/div/div[1]/div/div[3]/div/section[1]/div[2]/div[2]/div/ul/li[8]/span[contains(@class,'trend-down')]"))),CONCATENATE("+ ",(importxml("https://tw.stock.yahoo.com/quote/"&C2&".TWO","//div/div[1]/div/div[3]/div/section[1]/div[2]/div[2]/div/ul/li[8]/span[contains(@class,'trend-up')]"))))

以下範本包含上述所有範例:
Yahoo 股價抓取範本點此開啟
※本 Yahoo股價抓取範本 為個人學習Google 試算表函式應用之用途,切勿用於商業用途


原因三–API更新

Google Finance 的資料是通過 API 提供的,如果 Google 在最近更新了他們的 API,那麼可能會導致之前使用的抓取方法無法正常工作。

解決方法三

可以參考 Google Finance API 文件確認有沒有更新的內容及語法:
https://support.google.com/docs/answer/3093281?hl=zh-Hant

參考資料

GOOGLEFINANCE 文件

IMPORTXML 文件

IFNA 文件

XPath Tutorial – w3school

Yahoo 股市

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *