【问题标题】:Getting the specific value from website using excel vba使用 excel vba 从网站获取特定值
【发布时间】:2016-03-13 22:38:30
【问题描述】:

我正在尝试使用 Excel VBA 从网站获取特定文本。但我不知道该怎么做。请帮忙!

我想获取突出显示的 html 元素的值,“52.05”:

这是我的代码:

rowNum = 10
While rowNum < 51
    Do
        DoEvents
        Loop Until ie.readyState = READYSTATE_COMPLETE

    Set doc = ie.document
    On Error Resume Next

    output = doc.getElementById("yfi_quote_summary_data")
    Sheet1.Cells(rowNum, "E").Value = output

    rowNum = rowNum + 1
    ticker = Sheet1.Range("B" & rowNum).Value
    ie.navigate "http://finance.yahoo.com/q?s=" & ticker
Wend
ie.Quit

【问题讨论】:

  • 注释掉On Error Resume Next - 当你运行你的代码时会发生什么?另外:这里已经有很多类似的问题(有答案):stackoverflow.com/search?q=vba+google+finance
  • 我想要一些例子。 One Error Resume Next:指定当发生运行时错误时,控制权转到发生错误的语句之后的语句。
  • 知道它是做什么的,所以我建议你把它注释掉。
  • 您能给我看一些代码来说明如何获得该值吗?
  • 你想让我教你如何注释掉那行?

标签: vba excel web web-scraping


【解决方案1】:

试试这个。

Sub Get_Values()
Dim RowNum As Long
Dim ie As InternetExplorer
Dim ticker As String
Dim MainDocument As IHTMLDocument
Dim TableHTML, PrevClose As Object
Set ie = New InternetExplorer

ie.Visible = True

RowNum = 10

    ticker = Sheets("Sheet1").Range("B" & RowNum).Value
    ie.navigate "http://finance.yahoo.com/q?s=" & ticker

While RowNum < 51
    'LOOP UNTIL EMPTY COLUMN "B"
    Do Until Sheets("Sheet1").Range("B" & RowNum).Value = ""

    'WAIT FOR PAGE LOAD
    Do While Not ie.readyState = READYSTATE_COMPLETE
        DoEvents
        Application.Wait (Now + TimeValue("0:00:01"))
    Loop

    'SET PAGE VARIABLES
    Set MainDocument = ie.document
    Set TableHTML = MainDocument.getElementById("yfi_quote_summary_data")

    'FIND "PREV CLOSE" SECTION OF TABLE
    For Each tableheader In TableHTML.getElementsByTagName("th")
        If tableheader.innerHTML = "Prev Close:" Then
        Set PrevClose = TableHTML.getElementsByTagName("td")(0)
        Sheet1.Cells(RowNum, "E").Value = PrevClose.innerHTML
        Exit For
        End If
    Next tableheader

    'CONTINUE TO NEXT ROW
    RowNum = RowNum + 1
    ticker = Sheet1.Range("B" & RowNum).Value
    ie.navigate "http://finance.yahoo.com/q?s=" & ticker

    Loop
Wend

ie.Quit

End Sub

要获取 Bid 值,只需在代码中更改此行即可。

If tableheader.innerHTML = "Prev Close:" Then

改成

If tableheader.innerHTML = "Bid:" Then

【讨论】:

  • 感谢您的代码。它工作完美。但是,我不明白它是如何工作的。 1. 你能解释一下吗? 2. 我在哪里可以找到关于这个主题的一些教程? 3. 为什么我在“ span”中得到值“53.00”,我只需要使用getElementById("yfs_b00_msft").innerText ?
  • 嗨,我很高兴知道它运作良好。如果对您有帮助,请标记为正确答案。
  • 关于教程,我自己很难找到一些。最好的学习方法是练习:)
  • 请看我上面编辑的代码,如何获取Bid
  • 谢谢。我已经将其标记为正确答案。我只是混淆了父母和孩子的关系。根据一些帖子,我首先需要找到父母,然后再寻找孩子。我只是对这部分感到困惑。也许我需要学习一点html?
猜你喜欢
  • 1970-01-01
  • 2017-07-30
  • 1970-01-01
  • 1970-01-01
  • 2016-09-13
  • 2019-11-28
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多