【问题标题】:How to extract the name of the stock in yahoo finance如何在雅虎财经中提取股票名称
【发布时间】:2019-01-06 22:22:30
【问题描述】:

我找到了一个代码,可以从雅虎财经的“财务”选项卡中的表格中提取所有数据。 现在我希望能够提取股票名称以插入单元格 A3,靠近股票代码。

'this is the code to exctact the data
 Dim htm, Tr, Td, Tab1, Tab2, HTML_Content As Object
 Dim Web_URL As String
 Dim Column_Num_To_Start, iRow, iCol, eCol, iTable As Integer
 Dim Val, varVal1, varVal2, varVal3 As Variant
 Dim chtObj As ChartObject

 Column_Num_To_Start = 1
 iRow = 7
 iCol = Column_Num_To_Start
 iTable = 2

 Web_URL = "https://finance.yahoo.com/quote/" & Cells.Range("A2").Value & "/financials?p=" & Cells.Range("A2").Value

 Set HTML_Content = CreateObject("htmlfile")

 With CreateObject("msxml2.xmlhttp")
   .Open "GET", Web_URL, False
   .send
   HTML_Content.body.innerHTML = .responseText
 End With

 For Each Tab1 In HTML_Content.getElementsByTagName("table")
     With HTML_Content.getElementsByTagName("table")(iTable)
         For Each Tr In .Rows
             For Each Td In Tr.Cells
             ActiveSheet.Cells(iRow, iCol).Select
             ActiveSheet.Cells(iRow, iCol) = Td.innerText
             ActiveCell.WrapText = False
             iCol = iCol + 1
             Next Td
          eCol = iCol - 1
          iCol = Column_Num_To_Start
          iRow = iRow + 1
          Next Tr
        End With
    Exit For
Next Tab1

【问题讨论】:

    标签: excel vba web-scraping


    【解决方案1】:

    在执行页面的 XMLHTTP 请求之后:

    With CreateObject("msxml2.xmlhttp")
       .Open "GET", Web_URL, False
       .send
       HTML_Content.body.innerHTML = .responseText
    End With
    

    ...您可以从标题h1获取股票名称:

    stockName = HTML_Content.getElementById("quote-header-info").getElementsByTagName("h1")(0).innerText
    

    ...然后你可以把它放在你想要的地方(例如Range("A3").Value = stockName)。

    注意:我已经在https://finance.yahoo.com/quote/SAN/financials?p=SAN 上进行了测试,猜测这就是您的 URL 的样子。

    【讨论】:

      【解决方案2】:

      在我简要查看的所有股票中,它似乎总是第一个 h1,因此您可以真正使用

      的快速 css 选择器
      HTML_Content.querySelector("h1").innerText
      

      您还可以使用属性 = 值 css 选择器

      HTML_Content.querySelector("[data-reactid='7']").innerText
      

      作为一些感兴趣的旁注:您可以按如下方式使用复杂类:

      HTML_Content.querySelector(".D\28 ib\29 > h1").innerText
      

      现代浏览器和许多库都针对 css 进行了优化,因此除了旧 IE 版本之外,这是一种快速选择方法。

      我查看了标准普尔 500 指数 (^GSPC)、BP p.l.c。 (BP.L)、Banco Santander, S.A. (SAN)、Apple Inc. (AAPL)、通用电气公司 (GE)、美国铝业公司 (AA)、KOSPI 综合指数 (^KS11)

      【讨论】:

      • 我会尽快尝试
      • 试一试。这是一种更快的选择方法。
      • 亲爱的Qharr。抱歉我的重播晚了。我尝试了您的代码,但我无法收到该值。我使用了上面的代码,并以这种方式添加了您的代码: strStock = HTML_Content.querySelector("h1").innerTex
      • 请在 bin.com 上粘贴您的确切代码,我会看看。上面的代码经过多次测试。您收到错误消息了吗?
      • 感谢重播。代码很长,但收到此错误:对象不支持此属性或方法
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-11
      • 1970-01-01
      • 2022-01-22
      • 2013-11-06
      • 2021-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多