【问题标题】:Scraping data with vba from Yahoo finance使用来自 Yahoo Finance 的 vba 抓取数据
【发布时间】:2018-03-27 10:31:09
【问题描述】:

我需要从 Yahoo Finance 页面读取股票的收盘价。在使用 Google Finance 页面之前,我已经回答了这个问题,但该页面不再可用,我相信 Google 已经完全改变了它的 Finance 页面。我相信我可以在雅虎财经上应用同样的内容,只需稍作修改。

假设 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

请告诉我如何修改上面的代码以从雅虎财经页面读取数据。

【问题讨论】:

  • 请不要在你的问题标题中使用全大写 - 这被认为是对你的读者大喊大叫。
  • 请将数据 sn-p 复制为文本而不是屏幕截图,以使她能够重现您的问题而无需重新键入数据。
  • @Filburt 恐怕我不明白你的意思。你能澄清一下吗?此外,问题标题并非全大写。谢谢
  • 它不再是全大写了,因为我编辑了它。
  • 我的错.....谢谢

标签: excel web-scraping yahoo-finance vba


【解决方案1】:

试试下面的方法。它应该从https://finance.yahoo.com/quote/ 获取AAPL 的值。使用class 名称或tag 名称来达到该值实际上很麻烦。但是,我在这里使用了静态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

【讨论】:

  • 您好 - 我已经稍微修改了代码以循环一系列单元格。它按预期完美运行。非常感谢!
  • 您好 - 我注意到我的计算机每次运行时都会变得非常慢。临时 Internet 文件夹大小增加,我的电脑速度变慢。我必须清理它才能恢复正常。知道为什么吗?
  • 查看更新后的代码。它会立即为您获取结果。
  • 这简直太完美了!能不能用简单的话告诉我为什么之前的代码这么慢,导致运行后电脑变慢?
【解决方案2】:

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

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

这应该可以满足您的所有需求,而且还可以做更多!

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

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

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

【讨论】:

  • 您好 - 我相信您的模型不再适用于 Google 财经。请检查。
  • 啊,你是对的。好的,好吧,我有一段时间没有使用这个过程了。现在我对所有历史时间序列数据点使用 R 和 quantmod。 quantmod.com
  • 无论如何,您的模型都可以获取历史价格。如何获得实时价格。你有这个吗?
  • 我的 Excel 版本中没有这些连接。你是怎么得到它的?
  • 我刚刚更新了我原来的帖子......再次。我从我的办公机器上截取了第一个屏幕截图;第二个来自我家里的笔记本电脑。我现在才这样做,有史以来第一次。按照最后一个链接中的步骤操作。它非常直观。您应该在几分钟内启动并运行。如果此信息对您有用且有用,请对我的帖子进行投票!!祝你好运!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-28
  • 2020-03-12
  • 2013-10-02
  • 1970-01-01
相关资源
最近更新 更多