若沒有基礎可先參考:
https://raymondchiendtrt.blogspot.tw/2018/05/vba.html
https://raymondchiendtrt.blogspot.tw/2018/05/vba-xmlhttp.html
其實要找出網路資料藏在哪一個Request並不是一件困難的事,尤其像現在有各式各樣抓取網路封包的工具,如各瀏覽器的開發人員工具、Fiddler等等,而對我來說,我自己是比較習慣使用Chrome開發人員工具,因此就以此為基礎來寫教學文
首先,打開開發人員工具的方法有2個,第一個是直接按下F12,第二個是在網頁任意處按下「檢查」,即可呼叫出開發人員工具,為什麼這個工具這麼重要呢?
前面有說過,我們的網頁是由Client端發出的各個Request拿回來的Response所拼成的,而這個工具在被打開後,會記錄發送了哪些Request,整齊的列在上面
要找出藏有資料的Request有幾個小方法:
1.通常會藏在”doc”和”XHR”,也有少數是藏在”JS”的
2.名稱通常會包含關鍵字,例如股票代號、或是該商品的縮寫、代號等等的
以下開始圖文教學(以抓取股價為例)
Step1:瀏覽 http://www.yuanta.com.tw/pages/content/StockInfo.aspx
Step2:打開開發人員工具,選到"network",並搜尋2330
Step3:按下「查詢」,你會發現開發人員工具同時也在記錄你發了哪些Request
Step4:觀察剛剛所說的"Doc"和"XHR",用隨便一天的成交量測試(我是以5/3的33508來測試),因為用股價很容易重複
請參考紅色框框部分
Doc:
以此方式測試,結果回傳為0,代表這個Request沒有我們想要的資料
接著到XHR
發現有資料,此時最好比對一下前後的資料對不對(看一下前一天或後一天的成交量),以免抓錯資料
在確定完之後,發現這就是我們在找的,藏有資料的Request!
alantsai5840 wrote:
但 https://www.wantgoo.com/stock/astock/agentstat2?stockno=2002 沒找到...(恕刪)
近30日主力進出動向,這一頁的資料,就是這個網址,不用特別去找,只是網頁表格而己
程式碼也非常的簡單
請參考21樓範例(或參考其它樓,自行變化),表格代號 0~7
https://www.mobile01.com/topicdetail.php?f=511&t=4737630&p=1
alantsai5840 wrote:
https://www.wantgoo.com/stock/astock/agentstat?stockno=2002&type=3.5
...(恕刪)
這個網址,券商進出買超vs買超
請參考四個月前就寫好的,306樓的範例
alantsai5840 wrote:
可能沒說清楚 我是...(恕刪)
哈囉~請參考此檔案
附加壓縮檔: 201806/mobile01-33cfc832ee24a45a7a46e567af3086d3.zip
部落格文章:
https://raymondchiendtrt.blogspot.com/2018/06/excel-vba-30.html
程式碼:
Sub test()
Cells.Clear
Dim myXML As Object
Set myXML = CreateObject("Microsoft.XMLHTTP")
Dim myHTML As Object
Set myHTML = CreateObject("HTMLFile")
stockno = InputBox("輸入股號")
Dim t: t = Timer
With myXML
.Open "GET", "https://www.wantgoo.com/stock/astock/agentstat2?stockno=" & stockno, False
.send
myHTML.body[removed] = .responseText
Set myTable = myHTML.getElementsByTagName("table")(0)
ReDim myArr(1 To myTable.Rows.Length, 1 To myTable.Rows(0).Cells.Length)
i = 1
For Each myRow In myTable.Rows
j = 1
For Each myCell In myRow.Cells
myArr(i, j) = myCell.innerText
j = j + 1
Next
i = i + 1
Next
End With
Range("A3").Resize(UBound(myArr, 1), UBound(myArr, 2)).Value = myArr
Set myXML = Nothing
Set myHTML = Nothing
Erase myArr
Range("A2") = stockno
Application.StatusBar = "下載完畢,共花了" & Format(Timer - t, "0.00秒")
End Sub
關閉廣告