前幾篇簡介了如何以 Google 試算表內置的功能查詢股價及指數。近來收到數個讀者詢問,問題不約而同和某些股票市場有關。這些股票市場的數據不能從 Google 試算表取得,可能因為 Google 與這些交易所的協議限制吧。
在此情況下,可以使用 Google 試算表的其他功能,直接從網頁擷取數據。
ImportHTML 函式
ImportHTML 函式可以用來從網頁取得清單或表格內容。對於那些以表格形式展示的財經資訊,這個功能就最適合。例如,以下網站以表格形式列出上證指數的歷史價格。
https://hk.investing.com/indices/shanghai-composite-historical-data
在 Google 試算表裡,可用以下函式抓取整個表格的內容:
=importhtml(“https://hk.investing.com/indices/shanghai-composite-historical-data”,”table”,2)
其中,第一個參數是網址,以頭尾以”號包圍。第二個參數是要指明抓取的是清單還是表格。清單是 “list” ,表格則用 “table” 。最後一個參數,指定那個清單或表格在網頁裡的索引號,例如第一個表格就是 1 ,最二個就是 2 ,如此類推。
那麼,要怎樣才知道想抓取的表格是第幾個呢?最簡單的方法是由 1 開始逐個測試。另外,亦可查閱網頁的原始碼,或者使用瀏覽器的插件查詢。
輸入函式後,結果如下圖。你可以利用抓取到的數據再製作圖表。
ImportXML 函式
ImportXML 函式可以用來從網頁取得指定位置的內容。例如剛才提及的網站,內有即時上證指數價格。我們可以用以下函式,直接取得該項資料:
=importxml(“https://hk.investing.com/indices/shanghai-composite-historical-data”,”//span[@class=’arial_26 inlineblock pid-40820-last‘]”)
第一個參數就是網址,不難理解。第二個參數,是用來指定網頁中的哪一個部份。例如即時上證指數價格,在網頁原始碼裡是這一行:
<span class=”arial_26 inlineblock pid-40820-last” id=”last_last” dir=”ltr”>2,605.81</span>
在上述函式裡,第二個參數的 span 和 arial_26 inlineblock pid-40820-last,就是取自這一行原始碼。
又例如這個價格的標題為 “上證指數 (SSEC)”,原始碼如下:
<h1 class=”float_lang_base_1 relativeAttr” dir=”ltr”>上證指數 (SSEC) </h1>
把以上函式裡藍色和紅色的部份換成 h1 和 float_lang_base_1 relativeAttr,便可以擷取這項資訊,即是:
=importxml(“https://hk.investing.com/indices/shanghai-composite-historical-data”,”//h1[@class=’float_lang_base_1 relativeAttr‘]”)
要在網頁裡找出合用的原始碼,不需要把原始碼從頭到尾看一遍。筆者習慣使用的 Chrome 瀏覽器,有一個功能可以快速找出網頁特定部份的原始碼。
首先選取你想抓取的資料,然後右按,選擇檢查 (Inspect),在畫面右會彈出網頁的原始碼,而你選取的資料的相關原始碼亦已被反白標示。再右按這段程式碼,選 Copy > Copy XPath,該程式碼就會複製到剪貼簿。
利用以上兩個函式,就可以輕鬆取得大部份網頁裡的資料。Google 試算表裡還有其他 Import 系列的函式,有機會再談。
有一點必須留意,官方文件說這些函式只會每小時更新數據一次,所以並不適合用來實時擷取不斷更新的資料。但用來做每天收市分析,就綽綽有餘。
筆者已製作一個範例檔案,如欲索取,請到筆者的 Facebook 專頁讚好,然後傳訊息,範例的網址將於稍後奉上。日後有關投資分析的文章,亦會在專頁發佈。如有興趣閱讀更多本系列的文章,請讚好專頁以便收到新文章通知。
Thanks for sharing the useful information
回覆刪除感謝捧場,你在網誌分享的投資資訊也很有用呢!
刪除