简体   繁体   English

使用Excel VBA从yahoo finance中提取数据

[英]Extract data from yahoo finance using Excel VBA

Hi I need help with this code I'm trying to extract data from this page https://finance.yahoo.com/quote/ADM.L/balance-sheet?p=ADM.L , but the problem is page is by default set to annual but I need quarterly values of total assets and total liabilities. 嗨,我需要帮助这个代码我试图从这个页面https://finance.yahoo.com/quote/ADM.L/balance-sheet?p=ADM.L中提取数据,但问题是页面是由默认设置为年度,但我需要总资产和总负债的季度值。

This code runs but most of the time it is picking annual values. 此代码运行但大部分时间它都在选择年度值。 Please suggest something what can I do. 请建议我能做些什么。

Private Sub CommandButton3_Click()
'
Dim ie As Object
Set Rng = Range("A2:A50")
Set Row = Range(Rng.Offset(1, 0), Rng.Offset(1, 0).End(xlDown))
Set ie = CreateObject("InternetExplorer.Application")
With ie
'.Visible = False
For Each Row In Rng
.navigate "https://finance.yahoo.com/quote/" & Range("A" & Row.Row).Value & "/balance-sheet?p=" & Range("A" & Row.Row).Value
'Application.Wait (Now + TimeValue("0:00:02"))
While ie.readyState <> 4
Wend

Do While ie.Busy: DoEvents: Loop

Dim doc As HTMLDocument
Set doc = ie.document

doc.getElementsByClassName("P(0px) M(0px) C($actionBlue) Bd(0px) O(n)")(2).Click

Do While ie.Busy: DoEvents: Loop
Application.Wait (Now + TimeValue("0:00:05"))
Range("D" & Row.Row).Value = doc.getElementsByClassName("Fw(b) Fz(s) Ta(end)")(4).innerText
Range("E" & Row.Row).Value = doc.getElementsByClassName("Fw(b) Fz(s) Ta(end)")(12).innerText
Range("F" & Row.Row).Value = doc.getElementsByClassName("C($gray) Ta(end)")(0).innerText


Next Row
End With
ie.Quit
'
End Sub

This should be a good start for you to get going. 这应该是你开始的好开始。

Sub DownloadData()

Set ie = CreateObject("InternetExplorer.application")


With ie
    .Visible = True
    .navigate "https://finance.yahoo.com/quote/ADM.L/balance-sheet?p=ADM.L"

' Wait for the page to fully load; you can't do anything if the page is not fully loaded
Do While .Busy Or _
    .readyState <> 4
    DoEvents
Loop


Set e = ie.Document.GetElementsByClassName("Fz(s) Fw(500) D(ib) Pend(15px) H(18px) C($finDarkLink):h Mend(15px)")(1)
e.Click

    ' Wait for the page to fully load; you can't do anything if the page is not fully loaded
    Do While .Busy Or _
        .readyState <> 4
        DoEvents
    Loop

End With

End Sub

Basically, 'Annual' is the default and you have to click the 'Quarterly' link, to get the quarterly data displayed. 基本上,“年度”是默认值,您必须单击“季度”链接才能显示季度数据。 I believe yahoo used to have 2 different URLs for Annual and Quarterly. 我相信雅虎过去常常有2个不同的年度和季度网址。 Now, apparently, they give you 2 links to click to toggle back and forth between the 2 frequencies of financial statements. 现在,显然,它们为您提供了2个链接,可以在两个财务报表频率之间来回切换。

Do find below on the code fix. 请在下面找到代码修复程序。 Do take note that Yahoo has updated the classname ie from "P(0px) M(0px) C($actionBlue) Bd(0px) O(n)" ==> "P(0px) M(0px) C($c-fuji-blue-1-b) Bd(0px) O(n)". 请注意雅虎更新了类名,即“P(0px)M(0px)C($ actionBlue)Bd(0px)O(n)”==>“P(0px)M(0px)C($ c) -fuji-blue-1-b)Bd(0px)O(n)“。

Private Sub CommandButton3_Click()

    Dim ie As Object
    Set Rng = Range("A2:A50")
    Set row = Range(Rng.Offset(1, 0), Rng.Offset(1, 0).End(xlDown))
    Set ie = CreateObject("InternetExplorer.Application")

    With ie
        .Visible = True
        For Each row In Rng
            .navigate "https://finance.yahoo.com/quote/" & Range("A" & row.row).Value & "/balance-sheet?p=" & Range("A" & row.row).Value

            While ie.readyState <> 4
            Wend

            Do While ie.Busy: DoEvents: Loop

            Dim doc As HTMLDocument
            Set doc = ie.document

            Set element = doc.getElementsByClassName("P(0px) M(0px) C($c-fuji-blue-1-b) Bd(0px) O(n)")(2)
            element.Click

            Do While ie.Busy: DoEvents: Loop

            Range("D" & row.row).Value = doc.getElementsByClassName("Fw(b) Fz(s) Ta(end)")(4).innerText
            Range("E" & row.row).Value = doc.getElementsByClassName("Fw(b) Fz(s) Ta(end)")(12).innerText
            Range("F" & row.row).Value = doc.getElementsByClassName("C($gray) Ta(end)")(0).innerText
        Next row
    End With
    ie.Quit

End Sub

It is not possible to extract Quarterly data from Yahoo using VBA. 无法使用VBA从Yahoo中提取Quarterly数据。 Annual data can be extracted, but not quarterly. 可以提取年度数据,但不是每季度。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM