我跟踪某些股票,我想知道他们的分析师价格目标是什么。我经常使用两个不同的网站:finviz和marketwatch。所以,如果我想知道AAPL股票的平均分析师价格,我会输入:
marketwatch - http://custom.gtm.idmanagedsolutions.com/custom/ibg/html-analyst.asp?symb=aapl
finviz - http://elite.finviz.com/quote.ashx?t=aapl&ty=c&ta=0&p=i15
正如您可能预期的那样,搜索查询保持不变,但只是自动收报机(此处为“AAPL”)发生了变化。
我想要做的是找出一种方法来自动/在后台定期更新我跟踪的股票在这些页面上列出的目标价格。类似的东西:
A | B | C
ticker mktw PT finviz PT
AAPL XX YY
GOOG XX YY
NFLX XX YY
AMZN XX YY
简单的部分似乎是excel查找每个股票的网站,因为如上所述,股票代码保持静态,除了股票代码。困难的部分是如何在我正在寻找的页面上找到并提取数据(分析师价格目标)。
作为一个起点,我想通过下面的线条可以用来拉取数据;但我不知道如何解析最终结果。我也怀疑下面的方法是否有效,看起来真的非常密集,我想可以采用更简化的措施。
Option Explicit
Sub get_data()
Dim result As String
Dim myURL As String
Dim winHttpReq As Object
Set winHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")
myURL = "http://custom.gtm.idmanagedsolutions.com/custom/ibg/html-analyst.asp?symb=aapl"
winHttpReq.Open "GET", myURL, False
winHttpReq.Send
result = winHttpReq.responseText
Application.ScreenUpdating = True
Range("Sheet1!A1").Value = result
End Sub
是否有快速而肮脏的方式在excel中取消此功能?谢谢你的帮助。
答案 0 :(得分:0)
以下代码将marketwatch和finviz的平均目标价格放在sheet1的单元格A1和A2中。您可以将其置于循环中并捕获所有股票的数据。
Sub get_data()
Dim result As String
Dim myURL As String
For x = 1 To 2
myURL = Choose(x, "http://custom.gtm.idmanagedsolutions.com/custom/ibg/html-analyst.asp?symb=aapl", "http://elite.finviz.com/quote.ashx?t=aapl&ty=c&ta=0&p=i15")
Set html_doc = CreateObject("htmlfile")
Set xml_obj = CreateObject("MSXML2.XMLHTTP")
xml_obj.Open "GET", myURL, False
xml_obj.send
html_doc.body.innerhtml = xml_obj.responseText
Set xml_obj = Nothing
If x = 1 Then
Set Results = html_doc.getElementsByTagName("td")
For Each itm In Results
If itm.className = "mwSmall" And InStr(1, itm.innerhtml, "Average Target Price:", vbTextCompare) > 0 Then
mktw_pt = Trim(itm.nextSibling.innertext)
Exit For
End If
Next itm
Else
Set Results = html_doc.getElementsByTagName("td")
For Each itm In Results
If itm.className = "snapshot-td2-cp" And InStr(1, itm.outerhtml, "Target Price", vbTextCompare) > 0 Then
finviz_pt = itm.nextSibling.innertext
Exit For
End If
Next itm
End If
Next x
Range("Sheet1!A1").Value = mktw_pt
Range("Sheet1!A2").Value = finviz_pt
End Sub