使用 vba 从 Yahoo finance 抓取数据

Scraping data with vba from Yahoo finance

我需要从雅虎财经页面读取股票的收盘价。我在使用 Google 财经页面之前得到了这个答案,但该页面不再可用,我相信 Google 已经完全改变了它的财经页面。我相信我可以在稍加修改的情况下将其应用于雅虎财经。

假设 Yahoo Finance 具有以下股票代码 AAPL(Apple)代码:

    ![YAHOO WEBPAGE CODE FOR AAPL][1]

我只需要提取值 172.77。

这与 Google 财务页面完美配合。在我下面的代码中。

行:

    "https://finance.google.com/finance?q="

替换为:

    "https://finance.yahoo.com/quote/"

代码在一系列单元格中循环并读取股票代码。我们需要从 Yahoo 页面获得相同的结果。

    Sub ImportCurrentPriceNEW()
    Dim appIE As New InternetExplorer, html As HTMLDocument
    Dim item_data As Object    

    For k = 6 To 26 Step 1
     s = 1
     H = 1
     L = 1
     StopLoop = 0
     q = Format(k, "0")
     If IsEmpty(ActiveSheet.Range("$E$" & q).Value) = True Then  

     With appIE
    .Visible = False
    .navigate "https://finance.google.com/finance?q=" & Sheets("Up Trend 
     Stocks").Range("$A$" & q).Value
    Do Until .readyState = 4: DoEvents: Loop
    Set html = .document
    End With

   Set item_data = html.querySelector(".pr span")
   Range("$B$" & q).Value = item_data.innerText               
   End If    
Next    
appIE.Quit
Range("D1").Select

End Sub

请告诉我如何修改上面的代码以从 Yahoo Finance 页面读取数据。

试试下面的方法。它应该从 https://finance.yahoo.com/quote/ 中获取 AAPL 的值。使用class name 或tag name 来达到这个值实际上很麻烦。不过,我这里用的是static id.

Sub Fetch_Quote()
    Dim HTML As HTMLDocument, elem As Object, URL$
    URL = "https://finance.yahoo.com/quote/AAPL?p=AAPL"

    With CreateObject("InternetExplorer.Application")
        .Visible = True
        .navigate URL
        While .Busy = True Or .readyState < 4: DoEvents: Wend
        Set HTML = .document

        Set elem = HTML.getElementById("quote-market-notice").PreviousSibling.PreviousSibling
        MsgBox elem.innerText
    End With
End Sub

那就试试这个。现在,你应该眨眼就得到了结果:

Sub Fetch_Quote()
    Dim HTML As New HTMLDocument, elem As Object, URL$
    URL = "https://finance.yahoo.com/quote/AAPL?p=AAPL"

    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", URL, False
        .send
        HTML.body.innerHTML = .responseText

        Set elem = HTML.getElementById("quote-market-notice").PreviousSibling.PreviousSibling
        MsgBox elem.innerText
    End With
End Sub

要添加到库中的引用:

Microsoft XML, V6.0

也许你对google有反感,但我认为你应该考虑使用这个小工具。

http://investexcel.net/multiple-stock-quote-downloader-for-excel/

这应该可以满足您的所有需求,甚至更多!!

否则,在 Excel 中的“数据”选项卡下,单击“现有连接”,然后单击“MSN Money Central Investor Stock Quotes”。请参见下图。输入您的 tickers/symbols,然后单击“打开”。

如果尚未安装该应用程序,请单击下面的 link,然后按照步骤进行所有设置并在您的计算机上运行。

https://appsource.microsoft.com/en-us/product/office/WA104379220?tab=Overview