Excel VBA 網路資料蒐集 完整教學:
這次的程式是可以依據使用者輸入的日期
來抓到當天的期貨資料
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
請問我想要抓取選擇權每日交易行情http://www.taifex.com.tw/chinese/3/3_2_2.asp 要改什麼?謝謝回答
回覆刪除1.網址
刪除2.資料整理的部分,這就要觀察網站的HTML格式
謝謝版大的分享,獲益良多
回覆刪除請教一下,我試著用您的方法借花獻佛,捉下列網址資料時
測試如下
(1)將if先註解掉,好像只捉到第一個選單的table
(2)將If myTable.getAttribute("class") = table_f ,結果沒有東西
能幫我解惑嗎?謝謝
http://www.taifex.com.tw/chinese/3/7_8.asp?pFlag=&yytemp=2018&mmtemp=9&ddtemp=14&chooseitemtemp=ALL&goday=&choose_yy=2018&choose_mm=9&choose_dd=14&datestart=2018%2F9%2F14&choose_item=TX+++++
版大,我知原因了
刪除If myTable.getAttribute("classname") = "table_f"
謝謝
哈囉~您的留言也讓我學到許多,自己之前使用getElementsByClassName發現會出錯,因此一直以為無法利用class屬性,今天看到您的留言回去查了一下,的確有這個classname屬性,十分感謝,以後要抓資料會更方便!
刪除版大,再請教另一問題,下面這網址,我是不是無法用此方法取得table
回覆刪除結果中會出現下面這串文字
目前顯示項目: 智慧選股 – 季線向下走跌 (共計1345筆)
我想取得1345這個數字
謝謝
網址如下:
https://goodinfo.tw/StockInfo/StockList.asp?MARKET_CAT=%E6%99%BA%E6%85%A7%E9%81%B8%E8%82%A1&INDUSTRY_CAT=%E5%AD%A3%E7%B7%9A%E5%90%91%E4%B8%8B%E8%B5%B0%E8%B7%8C%40%40%E5%9D%87%E5%83%B9%E7%B7%9A%E5%90%91%E4%B8%8B%E8%B5%B0%E8%B7%8C%40%40%E5%AD%A3%E7%B7%9A&SHEET=%E7%A7%BB%E5%8B%95%E5%9D%87%E7%B7%9A&SHEET2=%E7%9B%AE%E5%89%8D%E4%BD%8D%E7%BD%AE%28%E5%85%83%29&RPT_TIME=
哈囉~由於這個網站table數量蠻多的,因此如果是我來處理的話,我會先抓id為"txtStockListData"的div tag,接著再去抓這個元素底下的第一個table資料
刪除最近期交所查詢好像改版 還能使用嗎
回覆刪除目前尚未測試,但看起來應該需要修改
刪除http://www.taifex.com.tw/cht/3/futDailyMarketReport
刪除麻煩您了