註冊
登錄
首頁
論壇版規
禁止列表
說明
地圖
數位書香
私人消息 (0)
公共消息 (0)
論壇任務 (0)
系統消息 (0)
好友消息 (0)
帖子消息 (0)
麻辣家族討論版版
»
Excel程式區
» Excel VBA 自動抓取期交所 期貨每日交易行情
返回列表
下一主題
上一主題
發帖
[原創]
Excel VBA 自動抓取期交所 期貨每日交易行情
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-30 00:51
|
顯示全部帖子
[原創]
Excel VBA 自動抓取期交所 期貨每日交易行情
VBA
,
網路爬蟲
,
投資
文章來源:https://raymondchiendtrt.blogspot.com/2018/05/excel-vba_29.html
這次的程式是可以依據使用者輸入的日期
來抓到當天的期貨資料
這次結合了幾個技巧
1.設定Requestheader
以我之前觀察到的,如果是用Microsoft.XMLHTTP
即使設定requestheader也是無效的
所以必須改用WinHttp.WinHttpRequest.5.1
2.轉碼
我平常能不用WinHttp就不用
因為使用這個物件常常就會變成亂碼
必須多使用轉碼程式才能取的資料(請見下方的convertraw function)
3.使用clipboard
這個物件很好用,會把在網站上的格式一併下載下來
所以如果你要抓的資料有合併儲存格(像goodinfo),或是有顏色等等的
可以用clipboard看看
但缺點就是createobject很難記XD,每次都要用查的
還有似乎不是每個表格(table)都抓的到,要試試看
4.使用application.wait
通常政府的網站若是抓太快很容易被鎖IP
所以利用此語法降低程式速度
一般來說設3秒就好,如果很怕被鎖可以再設久一點XD
大概是這樣,若有問題也歡迎在下方提出
Sub test()
Dim myXML As Object
Set myXML = CreateObject("WinHttp.WinHttpRequest.5.1")
Dim myHTML As Object
Set myHTML = CreateObject("HTMLFile")
Dim clipboard As Object
Set clipboard = CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
ReDim myArr(1 To 10, 1 To 20)
dateLR = Cells(Rows.Count, "A").End(xlUp).Row
With myXML
For dateRow = 6 To dateLR
Application.Wait Now() + TimeValue("00:00:03")
myM = Format(Month(Cells(dateRow, "A")), "00")
myD = Format(Day(Cells(dateRow, "A")), "00")
.Open "POST", "http://www.taifex.com.tw/chinese/3/3_1_1.asp", False
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.send "qtype=2&commodity_id=TX&commodity_id2=&market_code=0&goday=&dateaddcnt=0&DATA_DATE_Y=2018&DATA_DATE_M=05&DATA_DATE_D=22&syear=2018&smonth=" & myM & "&sday=" & myD & "&datestart=2018%2F05%2F15&MarketCode=0&commodity_idt=TX&commodity_id2t=&commodity_id2t2="
myHTML.body.innerHTML = convertraw(.responseBody)
'Debug.Assert InStr(1, myText, "10368") <> 0
Set myTables = myHTML.getElementsByTagName("table")
i = 1
For Each myTable In myTables
If myTable.getAttribute("width") = 965 Then
textLR = Cells(Rows.Count, "D").End(xlUp).Row
textLR = IIf(textLR = 1, 5, textLR + 5)
Cells(textLR, 4).Select
Cells(textLR - 1, 4) = myTable.PreviousSibling.innerText
Cells(textLR - 1, 4).WrapText = False
With clipboard
.SetText myTable.outerHTML
.PutInClipboard
End With
Sheets("工作表1").PasteSpecial NoHTMLFormatting:=False
Exit For
End If
Next
Next
End With
Set myXML = Nothing
End Sub
Function convertraw(rawdata)
Dim rawstr
Set rawstr = CreateObject("adodb.stream")
With rawstr
.Type = 1
.Mode = 3
.Open
.Write rawdata
.Position = 0
.Type = 2
.Charset = "UTF-8"
convertraw = .ReadText
.Close
End With
Set rawstr = Nothing
End Function
複製代碼
期貨交易行情查詢.zip
(29.31 KB)
下載次數: 48
2018-5-30 00:49
使用方式請參考影片
https://www.youtube.com/watch?v=Eg-2uYxa0q4
樓主熱帖
集保資料(改版後)
Excel VBA 錯誤處理流程(全圖解)
VBA網路爬蟲(網路資料蒐集)
VBA網路爬蟲-XMLHTTP物件
[教學文] 利用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-6-9 13:13
|
顯示全部帖子
回復
2#
netfish777
哈囉抱歉,這幾天太忙,剛剛寫了一個新檔案
請參考
http://forum.twbts.com/thread-20860-1-1.html
Excel VBA網頁資料收集教學:
http://forum.twbts.com/thread-20848-1-1.html
TOP
靜思自在 :
有心就有福,有願就有力,自造福田,自得福緣。
返回列表
下一主題
上一主題
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粉絲