標題:
[原創]
VBA網路爬蟲-XMLHTTP物件
[打印本頁]
作者:
iamaraymond
時間:
2018-5-9 13:59
標題:
VBA網路爬蟲-XMLHTTP物件
本帖最後由 iamaraymond 於 2018-5-9 14:11 編輯
之前的文:
http://forum.twbts.com/viewthread.php?tid=20748&fromuid=30076
要使用XMLHTTP,首先要先引用XMLHTTP物件
引用是一個甚麼概念呢?
VBA最基本的功能大部分是侷限在Excel的內部操作上
而引用則是把VBA帶出了Excel,來到外面的世界
變得可以操控文件、資料夾、IE瀏覽器等等
就像是請來了一個專家,你用VBA告訴這個專家我要做甚麼
舉大家比較熟的IE為例,其實當大家在使用createObject("InternetExplorer.Application")時
你就像聘請一位專家,當你用VBA寫下 IE.navigate"網址",就是請他把IE瀏覽到某個網頁
那如果我們今天要聘請"Microsoft.XMLHTTP"這位專家時該怎麼做呢?
引用有2種方法:Early Binding 和 Late Binding
Early Binding就是在工具->設定引用項目->勾選「Microsoft XML,v6.0」
優點是程式執行會比較快(但我沒實測過),編寫程式時會跑出預設字
但缺點是當你把程式分享給別人時,若對方沒勾選就會出錯
大家一般看到的「使用者自訂型態尚未定義」,這個錯誤就是代表你沒有勾選你要用的項目
因此個人比較喜歡用Late Binding,也就是 CreateObject("Microsoft.XMLHTTP")
比較沒有相容性的問題,而且預設字其實也沒有很多,打久了就會記得
一般常用的:
1. open "發送方法","網址",false
在網路上發送request的方式有好幾種,例如GET、POST、PUT、Delete
但若只是要爬蟲的話,只會使用GET和POST方法,大部分網站通常都是用GET方法在傳送資料,POST比較少
2. send "Request Body"
在GET方法下,不需要Request Body,Request Body是在POST才比較會用到
3. responseText
可得到下載的內容
4. responseBody
當responseText出現亂碼時才使用
以我在
http://forum.twbts.com/redirect. ... 3&fromuid=30076
這裡的回文為例
通常程式會像這樣
Sub test()
Cells.Clear
'stockno = InputBox("輸入股票代號")
Dim t: t = Timer
Dim myArr(1 To 1500, 1 To 6)
'*******************************************
'Part1 使用Late Binding
Dim myXML As Object
Set myXML = CreateObject("Microsoft.XMLHTTP")
'*******************************************
'Part2 抓取資料
With myXML
.Open "GET", "http://jdata.yuanta.com.tw/Z/ZB/ZBH/CZKC0.djbcd?a=EB09999&b=W&c=1440", False
.send
myText = .responseText
End With
'*******************************************
'Part3 整理資料
myText1s = Split(myText, " ")
j = 1
For Each myText1 In myText1s
i = 1
myText2s = Split(myText1, ",")
For Each myText2 In myText2s
If j > 6 Then Exit For
myArr(i, j) = myText2
i = i + 1
Next
j = j + 1
Next
[A2:F2] = Array("日期", "開", "高", "低", "收", "成交量")
[A3].Resize(1500, 6).Value = myArr
Set myXML = Nothing
Debug.Print Format(Timer - t, "0.00秒")
End Sub
複製代碼
此程式可以簡單分成3部分
1.使用Late Binding->也就是Set myXML = CreateObject("Microsoft.XMLHTTP")
2.找出資料來源,並下載下來
3.整理下載下來的資料,存進儲存格中
通常大家卡的都是第2步驟:下載資料,不知道哪一個request包含了資料
或是即使找到資料,卻因為網站各種防護機制而下載不下來
因此下次就來教大家如何去找出藏有資料的request
本系列帖子也會在我的Blog更新
https://raymondchiendtrt.blogspot.tw/
作者:
Scott090
時間:
2018-5-9 22:20
回復
1#
iamaraymond
拜讀了
期待下一課的到來
感恩
作者:
f3202
時間:
2018-5-13 08:26
感謝教學
期待新課程
作者:
iamaraymond
時間:
2018-5-13 10:05
感謝2位,原本想發一個怎麼找到別人資料庫位置的文,只是最近一位也是寫爬蟲的前輩提醒我,其實在論壇公開別人資料庫的位置就不是很好了,更何況是在公開的論壇發Step By Step破解的文。。。,
好吧,所以小弟在思考一下要如何寫比較好,也感謝2位耐心等候
作者:
nolookyou
時間:
2018-5-13 12:08
感謝版大熱心發教學文
小弟對資料庫也有興趣
期待版大的找資料庫教程
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)