2015年3月16日 星期一

Spreadsheet提取公開資訊觀測站現金流量表資料

公開資訊觀測站現金流量表並不是正規的TABLE表格,即使使用EXCEL WEB查詢,資料仍會無法正確顯示。
原先想利用IMPORTXML()去提取裡面有用的資訊,不知為何,嘗試多次均失敗,可是部分網站又可以(例如http://www.marketwatch.com/),有傳聞GOOGLE試算表改為新版後就發生這個問題了。不管如何,山不轉路轉,我使用另外一個方式來提取資料

首先,要善用瀏覽器的插件來分析網頁(小弟我是用 firefox 的 httpfox),找到所需文件正確位置,本例是提取股票代號6184大豐電100年第四季的現金流量表資料,正確位置是
http://mops.twse.com.tw/mops/web/ajax_t05st36?firstin=1&off=1&keyword4=&code1=&TYPEK2=&checkbtn=&queryName=co_id&TYPEK=all&isnew=false&co_id=6184&year=100&season=04

單純使用IMPORTXML()抓到的資料長相如下


(資料亂碼應是編碼問題,小弟仍無法解決)

看似很整齊的資料單純利用SPLIT卻被分割的七零八亂,原因是換行及空白代號的問題,這個資料如果貼到WORD裡頭去觀看(要到選項設定裡打開顯示字元符號及空白),會看到換行符號為向下的箭頭
這個換行符號的代碼是CHAR(10),裡頭看不見的空格代碼是CHAR(32)

完整語法請參考
=transpose(split(IMPORTHTML("http://mops.twse.com.tw/mops/web/ajax_t05st36?firstin=1&off=1&keyword4=&code1=&TYPEK2=&checkbtn=&queryName=co_id&TYPEK=all&isnew=false&co_id=6184&year=100&season=04","table",5),char(10)))



因為我只是要提取部分資訊,所以我使用QUERY()來查詢資料(中文字雖然是亂碼,但是有對應,所以可以當搜尋KEY。注意,這種亂碼使用Vlookup是無法正確搜尋的)

以本例來說,我要查詢的是"營業活動之淨現金流入(流出)"的數據,所以搜尋KEY對應的亂碼就是 營業活動之淨現金流入(流出)

=QUERY(B1:B300,"select * where B like '%營業活動之淨現金流入(流出)%'")
取出的資料仍然放在同一格,再利用SPLIT分離一次

如果只要100年度的數值,可配合使用 index()
=index(split(QUERY(B1:B300,"select * where B like '%營業活動之淨現金流入(流出)%'"),char(32)),1,2)
99年度數值==index(split(QUERY(B1:B300,"select * where B like '%營業活動之淨現金流入(流出)%'"),char(32)),1,3)

3 則留言:

  1. 請問:使用 google 哪個語法 可以匯出股市觀測站每個月彙總營收等資料......?  

    多謝

    https://support.google.com/docs/answer/3093339?hl=zh-Hant&ref_topic=3105411&vid=1-635805478089847803-3009733993

    http://mops.twse.com.tw/mops/web/t21sc04_ifrs



    回覆刪除
    回覆
    1. 朋友你好,你所要提取的資訊一樣用 IMPORTHTML()就可以得到,不過要找到正確的表格編號
      例如104年5月的網站網址是 http://mops.twse.com.tw/nas/t21/sii/t21sc03_104_5_0.html
      內中的年月你可用儲存格變數來取代,以方便不同日期查詢
      水泥工業的資料 table編號為4,所以函數=IMPORTHTML(A1,"TABLE",4)
      請以此類推
      由於這個網站的抓取的資料會出現亂碼,請參考網站內的亂碼解決辦法來處理

      刪除
  2. 請問該如何取得各股票的四大報表的正確網址 ?
    我想用 importhtml 捉取個股的財報資料 ~ 感恩 ~

    回覆刪除