返回列表 上一主題 發帖

[發問] VBA自動抓取finance.yahoo

這個資料有辦法用VBA自動抓嗎?

:) 各位, 我想每天用VBA自動抓取下面連結的網站

https://www.hangseng.com/en-hk/e-services/e-mpf/fund-price-performance/price/

每天自動更新的基金價格資料。
比如,
Name of Constituent Fund        Bid Price (HKD)        Offer Price (HKD)
Age 65 Plus Fund                        11.57                                   11.57
想抓取 11.57 這個價格,  請問用什麼方法呢?

試了query table 和 解析HTML都不成功呀。 多謝指點迷津!:handshake

TOP

回復 1# DanielWONG

試試看~
  1. Sub test()

  2. Cells.Clear

  3. Dim myXML As Object
  4. Set myXML = CreateObject("Winhttp.WinhttpRequest.5.1")

  5. With myXML
  6.     .Open "POST", "https://rbwm-api.hsbc.com.hk/pws-hk-hase-mpfunitprice-papi-prod-proxy/v1/mpf/getSuperTrustPlus", False
  7.     .setRequestHeader "content-type", "application/json;charset=UTF-8"
  8.     body = "{""locale"":""en""}"
  9.     .send body
  10.    
  11.     myText1 = .responseText
  12.     myText2 = Split(myText1, """trustPlusList"":[{""")(1)
  13.     j = 1
  14.     myStrArr = Array("FUND_NAME", "UNIT_PRICE_DATE", "FUND_CURRENCY", "ASK_PRICE", "BID_PRICE")
  15.     For Each myStr In myStrArr
  16.         myText3 = Split(myText2, myStr)
  17.         For i = 1 To UBound(myText3)
  18.             Cells(i + 1, j) = Replace(Replace(Split(myText3(i), ",")(0), ":", ""), Chr(34), "")
  19.         Next
  20.         j = j + 1
  21.     Next
  22.     Range("A1").Resize(1, UBound(myStrArr) + 1).Value = myStrArr
  23.     'Debug.Print .responseText
  24. End With
  25. Set myXML = Nothing
  26. End Sub
複製代碼
Excel VBA網頁資料收集教學:
http://forum.twbts.com/thread-20848-1-1.html

TOP

回復 1# DanielWONG

執行結果應該如下圖


我看他還有蠻多資料可以用的

(但我不知道那些資料的用途,所以就沒加了XD)
如果需要的話可自行加在myStrArr裡
Excel VBA網頁資料收集教學:
http://forum.twbts.com/thread-20848-1-1.html

TOP

回復 3# iamaraymond


    多謝大神, 我先消化一下您的方法!

TOP

回復 3# iamaraymond

請問
https://djinfo.cathaysec.com.tw/z/ze/zef/zef.djhtm
和   
http://justdata.yuanta.com.tw/z/ze/zeb/zeb.djhtm
這種下載後有部分隱藏下載不完全
該怎麼下載
謝謝

TOP

回復 3# iamaraymond


   
感覺 .ResponseText 內容好多啊!
其實我不需要選擇日期,只需要抓當前日期 Chinese Equity Fund, Global Bond Fund和Hang Seng Index Tracking Fund 三種基金的當前價格。是否可能抓少一些東西讓.ResponseText內容少些呢?

TOP

[發問] VBA自動抓取finance.yahoo

各位,如用VBA XML.HTTP自動抓取下面連結的網站

https://hk.finance.yahoo.com/quote/0388.HK?p=0388.HK

每天自動更新的成交量資料。我不會尋找對應的URL, 哪位元可以幫忙提供開始部分到ResponseText的代碼嗎? 感激!

回復 1# DanielWONG


    Sub 香港交易所_test()
Dim Stock1 As String
Dim oXmlhttp As Object, oHtmldoc As Object, surl As String, E As Object, R As Integer, C As Integer
  Set oXmlhttp = CreateObject("msxml2.xmlhttp")
   Set oHtmldoc = CreateObject("htmlfile")
     surl = "https://hk.finance.yahoo.com/quote/0388.HK"
        With oXmlhttp
        .Open "Get", surl, False
        .send
        oHtmldoc.Write .responseText
    End With
    ActiveSheet.Cells.Clear
     With oHtmldoc
        Set E = .all.tags("table")(1)
        For R = 0 To E.Rows.Length - 1
            For C = 0 To E.Rows(R).Cells.Length - 1
                ActiveSheet.Cells(R + 1, C + 1) = E.Rows(R).Cells(C).innerText
            Next
        Next
    End With
    End Sub

TOP

回復 6# DanielWONG

如果不需要日期的話,只要改一下myStrArr就好
myStrArr = Array("FUND_NAME", "FUND_CURRENCY", "ASK_PRICE", "BID_PRICE")

至於只取那三檔基金的資料
我覺得比較有彈性的作法是在旁邊直接用vlookup函數
保持資料的完整性
以免日後若想要取其他基金的資料又要改一次程式
Excel VBA網頁資料收集教學:
http://forum.twbts.com/thread-20848-1-1.html

TOP

回復 5# f3202

不好意思不是很了解你的意思
可以多說明一下嗎?
Excel VBA網頁資料收集教學:
http://forum.twbts.com/thread-20848-1-1.html

TOP

        靜思自在 : 自己害自己,莫過於亂發脾氣。
返回列表 上一主題