如何在Yahoo Finance中提取股票名称

时间:2019-01-06 22:22:31

标签: excel vba web-scraping

我找到了一个代码,该代码可从Yahoo Finance的“财务”标签中的表中提取所有数据。 现在,我想有可能也提取股票名称,以在股票代码附近插入单元格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

2 个答案:

答案 0 :(得分:2)

在执行页面的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的样子。

答案 1 :(得分: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版本外,这是一种快速选择方法。

我查看了S&P 500(^ GSPC),BP p.l.c. (BP.L),桑坦德银行(S.A.)(SAN),苹果公司(AAPL),通用电气公司(GE),美铝公司(AA),KOSPI综合指数(^ KS11)