Excel 股市資料抓取服務

提供Excel 股市資料抓取服務
可透過下列方式聯絡我
Email: iamaraymond@yahoo.com.tw
(FB請先加我好友再私訊,不然會跑到陌生訊息)

課程:
Excel VBA 金融資料抓取 | 打造股票研究系統 (學生數: 602,學員評價5顆星)
無痛起步-Excel VBA超入門實戰(學生數: 413,學員評價5顆星)


2018年5月26日 星期六

Excel VBA 自動下載網路檔案

Excel VBA 網路資料蒐集 完整教學:


今天想來複習一下用VBA下載網路檔案的語法
於是想到了從公開資訊觀測站自動下載年報檔案

只要在Excel的A3儲存格輸入股票代號
接著從A6開始往下輸入要抓的年度即可



語法:

Sub getReportA()

Dim myXML As Object
Set myXML = CreateObject("Microsoft.XMLHTTP")

Dim myHTML As Object
Set myHTML = CreateObject("HTMLFile")

Dim oStream As Object
Set oStream = CreateObject("ADODB.Stream")

stockno = [A3]

LR = Cells(Rows.Count, "A").End(xlUp).Row

With myXML
    For i = 6 To LR
        Application.StatusBar = "抓取" & Cells(i, "A") & "年報中..."
        Cells(i, "B").Hyperlinks.Delete
        Application.Wait Now() + TimeValue("00:00:03")
        .Open "GET", "http://doc.twse.com.tw/server-java/t57sb01?step=1&colorchg=1&co_id=" & stockno & "&year=" & Cells(i, "A") & "&mtype=F&", False
        .send
        myHTML.body.innerHTML = .responseText
     
        Set myLinks = myHTML.getElementsByTagName("a")
        For Each myLink In myLinks
            If myLink.innerText Like "*F04*" Then
                myLink2 = myLink.innerText
                Exit For
            End If
        Next
     
        If myLink2 = "" Then Cells(i, "B") = "檔案不存在": GoTo myNext
     
        .Open "POST", "http://doc.twse.com.tw/server-java/t57sb01", False
        .send "colorchg=1&step=9&kind=F&co_id=" & stockno & "&filename=" & myLink2
     
        If Right(myLink2, 3) = "pdf" Then
            thePDF = [B3] & "\" & stockno & "_" & Cells(i, "A") & ".pdf"
            myLink3 = "http://doc.twse.com.tw" & Split(Split(Split(.responseText, "a href")(1), ">")(0), "'")(1)
            .Open "GET", myLink3, False
            .send
        ElseIf Right(myLink2, 3) = "doc" Or Right(myLink2, 3) = "zip" Then
            thePDF = [B3] & "\" & stockno & "_" & Cells(i, "A") & Right(myLink2, 3)
             .Open "POST", "http://doc.twse.com.tw/server-java/t57sb01", False
             .send "colorchg=1&step=9&kind=F&co_id=" & stockno & "&filename=" & myLink2
        End If
     
        If Dir(thePDF) <> "" Then Kill thePDF
     
        oStream.Open
        oStream.Type = 1
        oStream.Write .responseBody
        oStream.SaveToFile (thePDF)
        oStream.Close
        With Sheets("工作表1")
            .Hyperlinks.Add Anchor:=.Cells(i, "B"), Address:=thePDF, TextToDisplay:=Right(myLink2, 3)
        End With
myNext:
    Next i
 
End With

Application.StatusBar = "抓取完畢"

Set myXML = Nothing
Set oStream = Nothing
End Sub




1 則留言:

  1. 您好,感謝您提供範例讓我學習可以用excel抓取網站的資料。但可能因為我能力不足,如果一個網站的資料有很多要輸入的欄位範圍才能查出資料,要怎樣用excel vba查詢呢?

    https://portal.sw.nat.gov.tw/APGA/GA30
    例如政府有一個進出口資料的查詢
    其設定的分類有
    1.進出口別 -->要點選查詢進口還是出口資料,假設要選擇出口資料
    2.資料週期 -->要點選查詢要按年還是按月,假設要點選按月
    3.資料期間 -->要用輸入的方式輸入起始與終止年月份, 例如 "110" 年"1"月, "111"年"1"月
    4.貨品別,點選類別後再輸入貨品號列,假設點選"指定貨品號列",輸入貨號 "847950"
    5.國家地區別。要點選類別後,再輸入國家。假設點選"全部國家"
    6.統計值,已點選類別,假設點選"金額美金"(原設定值)
    7.欄位順序,假設不調整。

    就可以查詢出某個年度、月份、對國外地區、847950項的出口資訊

    但是因為有太多不同類別的輸入方式,所以不知道要如何設定"點選","選擇月份" "輸入文字" "輸入數字"並存的自動程式查詢方式。

    我目前大概只會使用VBA查詢特定頁面有表格的字度抓取而已的程度(如上樂透網站抓號碼),再進一階就不會了。不知道能否像您請教。


    回覆刪除