最新消息

[公告2014/05/30] 如有需要將部落格中,任何一篇文章的程式碼使用在商業用途,請與我聯繫。

[公告2015/04/26] Line版的 iInfo程式與投資應用 群組已上線想加入的朋友們,請先查看 "入群須知" 再與我聯繫 Line : aminwhite5168,加入請告知身分與回答 "入群須知" 的問題。

[公告2018/04/22] 台北 Python + Excel VBA 金融資訊爬蟲課程,課程如網頁內容 金融資訊爬蟲班:台北班 Python 金融資訊爬蟲、EXCEL VBA 金融資訊爬蟲

[公告2019/01/08] 請注意:我再次重申,部落格文章的程式碼,是要提供各位參考與學習,一旦網頁改版請自行修改,別要求東要求西要我主動修改,你們用我寫東西賺錢了、交差了,請問有分我一杯羹嗎?既然賺錢沒分我,請問有什麼理由要求我修改,如果沒能力改,就花錢來找我上課。

[公告2019/12/01] 若各位有 Excel VBA 案子開發需求,歡迎與我聯繫,可接案處理。

[公告2020/05/22] 頁面載入速度慢,起因為部分JS來源(alexgorbatchev.com)失效導致頁面載入變慢,目前已做調整,請多見諒。

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,即可將全部內容進行中文解碼動作。

參考資料