利用VBA抓股價資料--找出網站資料庫

若沒有基礎可先參考:
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

利用VBA抓股價資料--找出網站資料庫

Step3:按下「查詢」,你會發現開發人員工具同時也在記錄你發了哪些Request
Step4:觀察剛剛所說的"Doc"和"XHR",用隨便一天的成交量測試(我是以5/3的33508來測試),因為用股價很容易重複

請參考紅色框框部分
Doc:

利用VBA抓股價資料--找出網站資料庫

以此方式測試,結果回傳為0,代表這個Request沒有我們想要的資料
接著到XHR

利用VBA抓股價資料--找出網站資料庫

發現有資料,此時最好比對一下前後的資料對不對(看一下前一天或後一天的成交量),以免抓錯資料

在確定完之後,發現這就是我們在找的,藏有資料的Request!

https://www.wantgoo.com/stock/astock/agentstat2?stockno=2002
上述網址 依版主的方法 無法找出 資料真正網址 能否請版主幫忙 謝謝
alantsai5840 wrote:
https://www...(恕刪)


測了一下 ... 2330
https://www.wantgoo.com/stock/astock/agentstat2?stockno=2330

https://www.wantgoo.com/stock/2330

不是把數字帶入就可了嗎 ?
不必找它原本的網址了吧 !!!

我自己是習慣用2種分類方式:
1.資料在HTML裡
2.資料獨立出來
您說的資料看起來應該是第一種,所以只要用原本的網址就可以了
而要抓Html的資料可以借助htmlfile物件
可以參考一下我的部落格,裡面應該有使用htmlfile物件的範例
可能沒說清楚 我是要抓網頁的資料 要找到網頁資料位置 沒找到 謝謝

例如 https://www.wantgoo.com/stock/astock/agentstat?stockno=2002&type=3.5

我有 找到 http://www.wantgoo.com/stock/astock/agentstat_ajax?StockNo=2002&Types=3.5

但 https://www.wantgoo.com/stock/astock/agentstat2?stockno=2002 沒找到
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



感謝 snare 大 及 版主 的 指導 和 幫忙

alantsai5840 wrote:
感謝 snare ...(恕刪)


不會,之後若有問題都可以提出喔~~
刪文。
The post has been deleted.
行路難,難重陳。行路難,難於山,險於水。行路難,不在水,不在山,只在人情反覆間。
關閉廣告
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!