VBA从多个网站刮取数据

时间:2016-06-09 19:44:59

标签: excel vba

我正在尝试使用VBA从invest.com上的多个页面中提取商品/股票价格并将其插入到Excel电子表格中。

以下代码是我一直在努力做单一价格的代码,在本例中为gold:

Sub Extractdatafromwebsite()

Dim ie As New InternetExplorer
Dim doc As HTMLDocument

ie.Visible = False
ie.navigate "http://uk.investing.com/commodities/gold"

Do
    DoEvents
    Loop Until ie.READYSTATE = READYSTATE_COMPLETE

Set doc = ie.document

output = doc.GetElementById("last_last").innerText
Range("A1").Value = output

ie.Quit

End Sub

但是,我需要来自多个网站的数据才能同时获得不同的价格。

我试着详细说明我所使用的代码,以下示例是我试图显示黄金和白银的价格,但是它只显示了A1和A1中的金价。 A2:

Sub Extractdatafromwebsite()

Dim ie As New InternetExplorer
Dim doc As HTMLDocument

ie.Visible = False
ie.navigate "http://uk.investing.com/commodities/gold"

Do
    DoEvents
    Loop Until ie.READYSTATE = READYSTATE_COMPLETE

Set doc = ie.document

output = doc.GetElementById("last_last").innerText
Range("A1").Value = output

ie.Quit

ie.navigate "http://uk.investing.com/commodities/silver"

Set doc = ie.document

output = doc.GetElementById("last_last").innerText
Range("A2").Value = output

ie.Quit


End Sub

有人可以帮我弄清楚如何让它在多个页面上工作吗?我试过搜索但是没有提出任何适合我需要的东西。

还有可能在收集数据的同时弹出一些类似“等待......”的内容吗?

由于

1 个答案:

答案 0 :(得分:0)

我发现使用READYSTATE是不可靠的,因为文档有时没有完全加载 - 或者至少没有加载对象模型。

因此,我通常在尝试访问新的doc对象之前添加sleep命令和Doevents

这应该对你有用(正如@Dave所说,你不需要使用 var values = {"0,","1","2"}; var theids = JSON.stringify(values); // Make an ajax call $.ajax({ type: "POST", url: "Page.aspx/Done", contentType: "application/json; charset=utf-8", data: {ids: theids }, dataType: "json", success: function (result) { alert('Alright, man!'); }, error: function (result) { alert('Whoops :('); } });

IE.Quit