返回列表 上一主題 發帖

[原創] VBA網路爬蟲(網路資料蒐集)

[原創] VBA網路爬蟲(網路資料蒐集)

本帖最後由 iamaraymond 於 2018-5-7 07:57 編輯

不好意思不太知道”分享”跟”原創”的差異,若發錯版還麻煩版主刪文

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

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

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

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

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

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

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

但當然IE法也是有其優點,例如有些網站可能要登入後才會顯示資料
那這時理論上XMLHTTP應該也可以做到,但十分麻煩,這時我就會選擇用IE來抓資料。

先寫到這邊吧,小弟最近被各種deadline摧殘 QAQ
但因為從論壇這邊學習到許多,所以想回饋一下,寫點自己很有興趣的東西,也幫大家提升抓資料的效率
希望能多產生一些交流,讓版主們辛苦經營的論壇多一點人氣

[本帖子視被deadline摧殘的程度更新:Q :Q ]
Excel VBA網頁資料收集教學:
http://forum.twbts.com/thread-20848-1-1.html

回復 1# iamaraymond

http://club.excelhome.net/thread-1159783-1-1.html

有興趣的可以看這邊,裏面更多,我自己也從中學到不少

TOP

這裡有一些常用的股票網站範例,可惜沒有教學,而且發問樓主不一定會回答
https://www.mobile01.com/topicdetail.php?f=511&t=4737630&p=1

TOP

回復 2# joey0415

這帖子我看過,裡面的內容讓我學到不少,但關於"在VBA用javascrpt抓資料"這個想法個人不是很認同
畢竟這其實是可以只用VBA完成的事,感覺不太需要再多用一種程式語言
況且javascript比VBA難學的多,也不容易debug,執行起來的速度似乎也沒比較快(印象中,因為我之前真的有試過),所以覺得有點多此一舉
不知道版主們有沒有嘗試過
Excel VBA網頁資料收集教學:
http://forum.twbts.com/thread-20848-1-1.html

TOP

回復 3# quickfixer

我覺得snare大還蠻熱心的,尤其是轉碼的程式真的很好用, 因為許多網站的內容抓下來都是亂碼
  1. Function convertraw(rawdata)

  2. Dim rawstr
  3. Set rawstr = CreateObject("adodb.stream")
  4. With rawstr
  5. .Type = 1
  6. .Mode = 3
  7. .Open
  8. .Write rawdata
  9. .Position = 0
  10. .Type = 2
  11. '繁體通常轉成big5就可以了,簡體通常是gb2312
  12. .Charset = "big5"
  13. convertraw = .ReadText
  14. .Close
  15. End With
  16. Set rawstr = Nothing

  17. End Function
複製代碼
引用自:
https://www.mobile01.com/topicdetail.php?f=511&t=4737630&p=1
Excel VBA網頁資料收集教學:
http://forum.twbts.com/thread-20848-1-1.html

TOP

回復 4# iamaraymond


    之前就有瀏覽過 2# 推薦的網址,是有它的內涵
還是請持續宏志,開闢 VBA的途徑引領另一學習的方向與方法

TOP

        靜思自在 : 待人退一步,愛人寬一寸,就會活得很快樂。
返回列表 上一主題