註冊
登錄
首頁
論壇版規
禁止列表
說明
地圖
數位書香
私人消息 (0)
公共消息 (0)
論壇任務 (0)
系統消息 (0)
好友消息 (0)
帖子消息 (0)
麻辣家族討論版版
»
Excel程式區
» VBA網路爬蟲-XMLHTTP物件
返回列表
下一主題
上一主題
發帖
[原創]
VBA網路爬蟲-XMLHTTP物件
iamaraymond
發短消息
加為好友
iamaraymond
(Raymond Chien)
當前離線
UID
30076
帖子
109
主題
12
精華
0
積分
177
金錢
177
點名
0
作業系統
win10
軟體版本
office2013
閱讀權限
20
性別
男
來自
高雄
在線時間
241 小時
註冊時間
2017-11-19
最後登錄
2023-7-5
暱稱:
Raymond Chien
中學生
帖子
109
主題
12
精華
0
積分
177
點名
0
作業系統
win10
軟體版本
office2013
閱讀權限
20
性別
男
來自
高雄
註冊時間
2017-11-19
最後登錄
2023-7-5
1
#
跳轉到
»
倒序看帖
打印
字體大小:
t
T
發表於 2018-5-9 13:59
|
顯示全部帖子
[原創]
VBA網路爬蟲-XMLHTTP物件
VBA
,
網路爬蟲
本帖最後由 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/
樓主熱帖
集保資料(改版後)
Excel VBA 錯誤處理流程(全圖解)
VBA網路爬蟲(網路資料蒐集)
Excel VBA 自動抓取期交所 期貨每日交易行情
[教學文] 利用VBA抓股價資料--找出網站資料
請問這個付費功能是如何設定的呢?
Excel VBA 期交所資料自訂日數查詢
表單問題 請問如何控制checkbox數量
想請教使用FindWindow按下對話框的"儲存"
收藏
分享
Excel VBA網頁資料收集教學:
http://forum.twbts.com/thread-20848-1-1.html
iamaraymond
發短消息
加為好友
iamaraymond
(Raymond Chien)
當前離線
UID
30076
帖子
109
主題
12
精華
0
積分
177
金錢
177
點名
0
作業系統
win10
軟體版本
office2013
閱讀權限
20
性別
男
來自
高雄
在線時間
241 小時
註冊時間
2017-11-19
最後登錄
2023-7-5
暱稱:
Raymond Chien
中學生
帖子
109
主題
12
精華
0
積分
177
點名
0
作業系統
win10
軟體版本
office2013
閱讀權限
20
性別
男
來自
高雄
註冊時間
2017-11-19
最後登錄
2023-7-5
2
#
發表於 2018-5-13 10:05
|
顯示全部帖子
感謝2位,原本想發一個怎麼找到別人資料庫位置的文,只是最近一位也是寫爬蟲的前輩提醒我,其實在論壇公開別人資料庫的位置就不是很好了,更何況是在公開的論壇發Step By Step破解的文。。。,
好吧,所以小弟在思考一下要如何寫比較好,也感謝2位耐心等候
Excel VBA網頁資料收集教學:
http://forum.twbts.com/thread-20848-1-1.html
TOP
靜思自在 :
多做多得。少做多失。
返回列表
下一主題
上一主題
Excelㄧ般區
生活與感動
EXCEL專屬討論區
Excelㄧ般區
Excel程式區
進階應用專區
OFFICE 系列
Word
PowerPoint
Access
Office不分區
程式語言
VB 與 VB.Net
C 與 C#
Java 與 J#
程式設計不分區
資料庫
ORACLE
My SQL
MS SQL
網頁設計
ASP 與 ASP.NET
PHP
PHP+MySQL 入門實作
JavaScript
FLASH / ActionScript
HTM/ HTML/ CSS
網頁設計不分區
電腦與作業系統
電腦各種硬體討論
一般電腦軟體討論
論壇事務
管理公告
投訴反映
新手測試
愛 • 生活
公益佈告欄
生活與感動
[收藏此主題]
[關注此主題的新回復]
[通過 QQ、MSN 分享給朋友]
申請友情鏈接
Facebook粉絲