
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