Excel 股市資料抓取服務

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

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


2018年5月7日 星期一

VBA網路爬蟲(網路資料蒐集)--簡述原理



 http://forum.twbts.com/thread-20748-1-1.html

最近回復了許多帖子都是關於如何用VBA做網路爬蟲,抓取如股票資料等資訊,所以想說直接寫成一篇教學文,讓對此有興趣的朋友有個入門的管道,只是因為這些都是自學而來,若有錯誤或建議還請版主以及版上的各位高手不吝指教。

小弟學習使用VBA做網路爬蟲有一陣子了,抓過不少資料,也累積了一些心得
小弟比較熟悉的爬蟲方式有三種:
1.QueryTable(也有人稱QT)
2.操控IE
3.XMLHTTP(這物件的兄弟蠻多的,如MSXMLWinHttp等等的)
其中12的方法在論壇中已經使用過許多次,建議大家如果有需要的話可以自行搜尋一下相關的帖子(或是之後我在寫教學文)

XMLHTTP似乎較少人運用,但就速度上來說,其實是比QT法和IE法快上好幾倍,簡單講一下原因,不知道各位有沒有想過,當我們在網路上按下某個連結時,到底發生了甚麼事呢?


在網路上有分Client端跟Server端,當按下連結時,Client端會發送許多RequestServer端,Server接收到Request後會回傳相對應的Response回來

用一個簡單的例子比喻,就像是你(Client)今天寄了一封信給你朋友A(Server),說你想要2330的股價資料,於是朋友A就把資料找出來寄回給你

所以說我們看到的網站就是,由你剛剛發出去的一大堆Request拿到的response組合起來的成果,就像拼拼圖一樣,有request拿回來「拼圖的框架」,有request拿回來「圖片」的拼圖,有request拿回來「數據」的拼圖等等的,最後把這些拼圖放在該放的地方,就變成了我們看到的網站

那為什麼XMLHTTP法會這麼快?
因為XMLHTTP是模擬發送一個會拿到「數據的拼圖」的request,換句話說,相較於前面所說的發送一大堆requestXMLHTTP只發送了一個request,而這個request能拿到數據的資料,所以時間上當然差異許多

但當然IE法也是有其優點,例如有些網站可能要登入後才會顯示資料,那這時理論上XMLHTTP應該也可以做到,但十分麻煩,這時我就會選擇用IE來抓資料。
先寫到這邊吧,小弟最近被各種deadline摧殘 QAQ

[本文視被deadline摧殘的程度更新]

1 則留言:

  1. 請問我那錯了 , myTables 中沒有資料 ?? 但 myHTML 則有

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

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

    With myXML
    .Open "GET", "https://mops.twse.com.tw/server-java/t164sb01?step=1&CO_ID=1723&SYEAR=2019&SSEASON=1&REPORT_ID=C", False
    .send

    myHTML.body.innerHTML = .responseText

    t = 0
    'Call delay(3)
    Set myTables = myHTML.getElementsByTagName("table")(2)

    For Each myTable In myTables
    For Each myRow In myTable.Rows
    For Each myCell In myRow.Cells
    Debug.Print myCell.innerText & "---" & t

    Next

    Next
    t = t + 1
    Next

    End With

    Set myXML = Nothing
    Set myHTML = Nothing

    End Sub

    回覆刪除