我找到了一个代码,该代码可从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
答案 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)