【发布时间】:2015-12-04 23:02:40
【问题描述】:
我一直在尝试从网站上抓取和解析一些财务数据,以便可以使用 VBA 将数据添加到 Excel 电子表格中。我找到了几种可能的解决方案,但我似乎无法让它们适合我的参数。我的问题是我只需要表格中的一个变量(平均目标价格)。我一直无法弄清楚我做错了什么。我还将使用类似的 VBA 格式一次检查数百家公司,所以如果有更有效的方法来编写我所拥有的内容,请告诉我。
这是我目前所拥有的:
Sub ImportAnalystEst()
Dim oHtml As HTMLDocument
Dim oElement As IHTMLElement
Set oHtml = New HTMLDocument
With CreateObject("WINHTTP.WinHTTPRequest.5.1")
.Open "GET", "http://www.marketwatch.com/investing/stock/aapl/analystestimates", False
.send
oHtml.body.innerHTML = .responseText
End With
Dim wsTarget As Worksheet
Dim i As Integer
i = 1
Set wsTarget = ActiveWorkbook.Worksheets("Sheet1")
For Each oElement In oHtml.getElementsByClassName("snapshot")
wsTarget.Range("A" & i) = Split(oElement.Children(0).innerText, "<TD>")
i = i + 1
Next
End Sub
这是我试图从中提取的 HTML。谁能举例说明我如何提取 146.52 的平均目标价?
<div class="analystEstimates">
<div class="block">
<h2>Snapshot</h2>
</div>
<table class="snapshot">
<tbody>
<tr>
<td class="first">Average Recommendation:</td>
<td class="recommendation">
Overweight
</td>
<td class="first column2">Average Target Price:</td>
<td>146.52</td>
</tr>
<tr>
<td class="first">Number of Ratings:</td>
<td>
【问题讨论】:
-
为什么不直接查看
innerText并使用正则表达式来获得您想要的值? -
如果您可以依赖布局,并且不必搜索“平均目标价格”,那么
Split(oHtml.getElementsByClassName("snapshot").item(0).firstchild.firstchild.innerhtml,"TD")(7)将返回:>146.52</,然后您可以对其进行清理。
标签: html vba excel web-scraping