2020年10月24日 星期六

Excel VBA 爬蟲 財務資料 (Microsoft.XMLHTTP、get )

 這邊還是強調歐,請尊重網路資源,切勿濫用!!!!這點超重要的。

這是一篇教學文,主要是透過Microsoft.XMLHTTP的GET方式取得資料,彙整後取出各上市公司的"營業利益率",    "稅前淨利率",    "稅後淨利率",    "流動比率",    "速動比率",    "負債比率%",    "存貨週轉率(次)"等資料。

一、步驟:

1.選擇抓網路資料的方法

本文以Microsoft.XMLHTTP get方法執行。

2.資料回傳後,彙整方式

本文後續會說明如何以split的方式拆解資料

3.資料呈現方式與後續再使用。

建議已可滿足閱讀性尤佳。

二、教學文:

2.1.選擇抓網路資料的方法

2.1.1 程式碼:程式碼主要為以下部分,URL變數為網址。

     Set web = CreateObject("Microsoft.XMLHTTP")
    web.Open "get", Url, False
    web.send
    web.responsetext

     說明:筆者以台泥財務比率表為例(如下圖1.),設定url為該網址執行上列模組後,web.responsetext此一部分即為執行後回傳資料。

1.台泥財務比率資料

圖1資料網址:http://XXXXXX.com.tw/z/zc/zcr/zcr_1101.djhtm

圖2.vba 即時運算視窗

圖2 說明:透過 ? web.responsetext 指令所印出的資料

2.2.資料回傳後,彙整方式

2.2.1 思考點:應該如何彙整?透過表單(sheet)或透過陣列方式儲存後再取出所需要的資料都是方法之一,不過差別在於效率不同。

以下圖3與圖4分別為筆者透過表單(sheet)與陣列方式所儲存的web.responsetext回傳資料。

圖3.表單儲存


圖4.陣列儲存

2.2.2 圖3與圖4該如何作? 

筆者是透過split與vblf將回傳的資料作分割,一次丟到陣列中,後續再運用陣列剖析的技巧(如instr與split作更進一步的資料分離),並沒有用到"htmlfile"的物件故如getelementsbyname等方法後面不會出現歐,所以看到這裡,想學"htmlfile"就先說聲抱歉了。

vba語法:webdata = Split(web.responsetext, vbLf)

運行後,此時webdata 陣列的資料會儲存如下圖所顯示的資料。


image

再結合for迴圈就可以將陣列中的資料逐一寫入excel 儲存格中,若要更進一步拆解出需要的字元可以配合split作拆解


沒有留言:

張貼留言

我的雷達:2024/11/15

  似乎有一種不安的味道