範例網站:台灣股市資訊網http://goodinfo.tw/StockInfo/index.asp
股票代號:中華電信2412 ,取得合併資產負債表內各季的資料



使用xmlhttp get,可以方便取得這個網站第一個網頁的資料
像上面這幾張圖,第一頁是沒問題
如果要其它資料時,就需要先選好種類後網頁才產生新內容
可是這類型的網頁在選擇資料類型更新內容後,有個特色
就是網址不會變

所以也不能用換網址的方式來抓資料,xmlhttp get就失效了
雖然可用簡單的ieobject來模擬點擊網頁抓資料,但缺點就是超慢,一筆2秒~1分鐘
想快就需改用 WinHttp post,一筆可縮短到0.3秒

'===程式碼不多做說明,雖然程式碼同類型網站都通用=========
'===可惜這些代碼、網址,只適用這個範例網站===============
'===只要換網站就要重新看網頁原始碼、追蹤網址、找出正確代碼==
'範例:中華電信2412合併季表2017Q1
'程式碼,請放在“模組”裡面
Sub getpost()
Cells.ClearContents
Dim HTMLsourcecode, Url, Url_a, TempArray()
Set HTMLsourcecode = CreateObject("htmlfile")
Url = "http://goodinfo.tw/StockInfo/StockFinDetail.asp?STEP=DATA&STOCK_ID=2412&RPT_CAT=BS_M_QUAR&QRY_TIME=20171"
Url_a = "http://goodinfo.tw/StockInfo/StockFinDetail.asp?RPT_CAT=BS_M_QUAR&STOCK_ID=2412"
With CreateObject("WinHttp.WinHttpRequest.5.1")
.Open "POST", Url, False
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.setRequestHeader "Referer", Url_a
.setRequestHeader "Cache-Control", "no-cache"
.setRequestHeader "Pragma", "no-cache"
.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
.Send
HTMLsourcecode.body.innerhtml = convertraw(.ResponseBody)
Set Table = HTMLsourcecode.all.tags("table")(1).Rows
ReDim TempArray(Table.Length-1, Table(2).Cells.Length-1)
For i = 0 To Table.Length - 1
For j = 0 To Table(i).Cells.Length - 1
TempArray(i, j) = Table(i).Cells(j).innertext
Next j
Next i
Sheets("sheet1").Range(Cells(1, 1), Cells(Table.Length, Table(2).Cells.Length)) = TempArray()
End With
Set HTMLsourcecode = Nothing
Erase TempArray()
End Sub
Function convertraw(rawdata)
Dim rawstr
Set rawstr = CreateObject("adodb.stream")
With rawstr
.Type = 1
.Mode = 3
.Open
.Write rawdata
.Position = 0
.Type = 2
.Charset = "utf-8"
convertraw = .ReadText
.Close
End With
Set rawstr = Nothing
End Function
'=========================================================
取得別的股票代號修改方式(第一頁請維持get方式抓取,不知道第一頁是什麼,請回頭看61樓)
範例:中鋼2002 合併季表2017Q1
url、url_a,需同時修改
Url = "http://goodinfo.tw/StockInfo/StockFinDetail.asp?STEP=DATA&STOCK_ID=2002&RPT_CAT=BS_M_QUAR&QRY_TIME=20171"
Url_a = "http://goodinfo.tw/StockInfo/StockFinDetail.asp?RPT_CAT=BS_M_QUAR&STOCK_ID=2002"
取得資產負債表內其它年表、季表
url_a :只需要改最後4個字(股票代號)
url :要改2個地方
一、STOCK_ID=(股票代號)
二、年表、季表、年份,請照下面代碼修改,注意大小寫
資產負債表(BS_M_QUAR)
合併季表 2016Q4、Q3
BS_M_QUAR&QRY_TIME=20164
BS_M_QUAR&QRY_TIME=20163
合併年表 2016、2015
BS_M_YEAR&QRY_TIME=2016
BS_M_YEAR&QRY_TIME=2015
非合併季表2017Q1、2016Q4
BS_QUAR&QRY_TIME=20171
BS_QUAR&QRY_TIME=20164
非合併年表2016、2015
BS_YEAR&QRY_TIME=2016
BS_YEAR&QRY_TIME=2015
合併簡式季表2017Q1、2016Q4
BS_EZ_M_QUAR&QRY_TIME=20171
BS_EZ_M_QUAR&QRY_TIME=20164
合併簡式年表2016、2015
BS_EZ_QUAR&QRY_TIME=20171
BS_EZ_QUAR&QRY_TIME=20164
非合併簡式季表2017Q1、2016Q4
BS_EZ_QUAR&QRY_TIME=20171
BS_EZ_QUAR&QRY_TIME=20164
非合併簡式年表2016、2015
BS_EZ_YEAR&QRY_TIME=2016
BS_EZ_YEAR&QRY_TIME=2015
'===============================
其它季表、年表、代碼、網址(注意大小寫)
範例:中華電信2412
損益表(IS_M_QUAR_ACC)
url_a="http://goodinfo.tw/StockInfo/StockFinDetail.asp?RPT_CAT=IS_M_QUAR_ACC&STOCK_ID=2412"
損益表(合併單季季表2016Q4)
url="http://goodinfo.tw/StockInfo/StockFinDetail.asp?STEP=DATA&STOCK_ID=2412&RPT_CAT=IS_M_QUAR&QRY_TIME=20164"
IS_M_QUAR 合併單季季表
IS_M_QUAR_ACC 合併累計季表
IS_M_YEAR 合併年表
IS_QUAR 非合併單季季表
IS_QUAR_ACC 非合併累計季表
IS_YEAR 非合併年表
IS_EZ_M_QUAR 合併簡式單季季表
IS_EZ_M_QUAR_ACC 合併簡式累計季表
IS_EZ_M_YEAR 合併簡式年表
IS_EZ_QUAR 非合併簡式單季季表
IS_EZ_QUAR_ACC 非合併簡式累計季表
IS_EZ_YEAR 非合併簡式年表
'================================
現金流量表(CF_M_QUAR_ACC)
url_a="http://goodinfo.tw/StockInfo/StockFinDetail.asp?RPT_CAT=CF_M_QUAR_ACC&STOCK_ID=2412"
現金流量表(合併單季季表2016Q4)
url="http://goodinfo.tw/StockInfo/StockFinDetail.asp?STEP=DATA&STOCK_ID=2412&RPT_CAT=CF_M_QUAR&QRY_TIME=20164"
CF_M_QUAR 合併單季季表
CF_M_QUAR_ACC 合併累計季表
CF_M_YEAR 合併年表
CF_QUAR 非合併單季季表
CF_QUAR_ACC 非合併累計季表
CF_YEAR 非合併年表
'================================
財務比率表(XX_M_QUAR_ACC)
url_a="http://goodinfo.tw/StockInfo/StockFinDetail.asp?RPT_CAT=XX_M_QUAR_ACC&STOCK_ID=2412"
財務比率表(合併單季季表2017Q1)
url="http://goodinfo.tw/StockInfo/StockFinDetail.asp?STEP=DATA&STOCK_ID=2412&RPT_CAT=XX_M_QUAR&QRY_TIME=20171"
XX_M_QUAR 合併單季季表
XX_M_QUAR_ACC 合併累計季表
XX_M_YEAR 合併年表
XX_QUAR 非合併單季季表
XX_QUAR_ACC 非合併累計季表
XX_YEAR 非合併年表
'================================
基本資料
股利政策
財務評分表
請使用get方式
'================================
其它季別、年份,正確的網址,為節省文章空間,請自行看範例腦補。
程式自動化、美觀,請自行另加程式碼處理
5/27 補充
增加一個變數,可以取得股票名稱、報表種類
至於要加在那裡、怎麼用,自己想辦法了

stockname = Split(HTMLsourcecode.all.tags("table")(0).innertext, " ")(1) & _
Split(HTMLsourcecode.all.tags("table")(0).innertext, " ")(2) & _
Split(HTMLsourcecode.all.tags("table")(0).innertext, " ")(4)
附加壓縮檔: 201705/mobile01-641ffcda49436c367c20846191239c66.zip