2015年6月26日 星期五

Google Spreadsheet 試算表 抓網頁資料

常用的Excel抓取網頁資料,今天使用Google提供的試算表來抓資料。
Microsoft Excel提供了QueryTable的方法來抓取網頁表格的資料。
Google Spreadsheets提供了importHtml的方法來抓取網頁表格的資料。

IMPORTHTML(網址, 查詢, 索引)
  • 網址 - 要檢查的網頁所在網址,包括通訊協定名稱 (例如 http://)。
    • 請注意,網址的值必須放置在引號內,或者是一個含有適當文字的儲存格參照。
  • 查詢 - 根據存放資料的結構類型而定,此值可設定成 "list" (清單) 或 "table" (表格)。
  • 索引 - 從 1 開始累進的索引值,指明應傳回 HTML 原始碼中界定的哪一個表格或清單。
    • 系統會分開處理清單及表格的索引;如果 HTML 網頁上同時有清單和表格,這兩種元素可能都會有 1 的索引值。
=ImportHtml("http://en.wikipedia.org/wiki/Demographics_of_India", "table",4)
今天我們就用ImportHtml抓取證交所三大法人買賣超金額資料
Step 1. 在Google的雲端硬碟,新增一個 "三大法人買賣超金額統計表"。

Step 2. 三大法人買賣金額統計表連結  http://www.twse.com.tw/ch/trading/fund/BFI82U/BFI82U.php

在儲存格 A1中輸入
=importHtml("http://www.twse.com.tw/ch/trading/fund/BFI82U/BFI82U.php", "table", 10)

資料匯入試算表後,會見到亂碼顯示,這是因為Spredsheet是預設將資料以"西歐語系"來呈現,因此需要對儲存格資料進行中文解碼動作。

Step 3. 開啟 工具/指令碼編輯器,進行JavaScript的編碼程式撰寫,這就像是在編寫Execl VBA 一樣,只是在Google Spreadsheets上是使用JavaScript來進行編寫。

在指令碼編輯器中輸入以下輸入以下程式碼
function encode_utf8( s ){
  return Utilities.newBlob("").setDataFromString(s, "ISO-8859-1").getDataAsString("UTF-8") ;
}

function encode_big5( s ){
  return Utilities.newBlob("").setDataFromString(s, "ISO-8859-1").getDataAsString("big5") ;
}

撰寫好JavaScript程式碼後,記得進行編譯,編譯成功後才能使用自定函數。

Step 4.  在儲存格 A10中輸入 =encode_big5(a2),即可進行中文解碼動作。

Step 5. 最後將儲存格範圍擴大到 A10:D15,即可將全部內容進行中文解碼動作。

參考資料