You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改现有VBA XMLHTTP代码以爬取Investing.com经济指标数据

核心耐用品订单数据爬取适配方案
  • 你原有代码调用的是Investing的通用历史数据接口,仅需修改请求参数和返回值解析逻辑即可适配经济指标数据爬取,不需要更换整体实现逻辑。
  • 核心修改点是替换POST请求的send参数,经济类指标的curr_id与金融产品不同,本次你要爬取的核心耐用品订单对应curr_id为59,请求头不需要修改。
  • 经济指标返回的历史表格仅包含4-5列,需要调整单元格赋值逻辑避免下标越界报错。

修改后的完整可运行代码如下:

Option Explicit
Sub 导出核心耐用品订单数据()

'Html对象定义---------------------------------------'
 Dim htmlDoc As MSHTML.HTMLDocument
 Dim htmlBody As MSHTML.htmlBody
 Dim ieTable As MSHTML.HTMLTable
 Dim Element As MSHTML.HTMLElementCollection


'工作簿、工作表、变量定义 ----------------'
 Dim wb As Workbook
 Dim Table As Worksheet
 Dim i As Long

 Set wb = ThisWorkbook
 Set Table = wb.Worksheets("Sheet1") '可修改为你自己的工作表名

 Dim xmlHttpRequest As New MSXML2.XMLHTTP60


 i = 2

'接口请求--------------------------------------------------------------------------'
 With xmlHttpRequest
 .Open "POST", "https://www.investing.com/instruments/HistoricalDataAjax", False
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.setRequestHeader "X-Requested-With", "XMLHttpRequest"
'修改此处send参数为核心耐用品订单对应参数,可自行调整起止日期
.send "curr_id=59&smlID=20582&header=核心耐用品订单历史数据&st_date=01%2F01%2F2017&end_date=03%2F01%2F2024&interval_sec=Monthly&sort_col=date&sort_ord=DESC&action=historical_data"


 If .Status = 200 Then

        Set htmlDoc = CreateHTMLDoc
        Set htmlBody = htmlDoc.body

        htmlBody.innerHTML = xmlHttpRequest.responseText

        Set ieTable = htmlDoc.getElementById("curr_table")

        For Each Element In ieTable.getElementsByTagName("tr")
            '经济指标仅需提取日期、公布值、预测值、前值四列,按需调整列数
            If Element.Children.Length >=4 Then
                Table.Cells(i, 1) = Element.Children(0).innerText '日期
                Table.Cells(i, 2) = Element.Children(1).innerText '公布值
                Table.Cells(i, 3) = Element.Children(2).innerText '预测值
                Table.Cells(i, 4) = Element.Children(3).innerText '前值
                i = i + 1
            End If
        DoEvents: Next Element
 End If
End With


Set xmlHttpRequest = Nothing
Set htmlDoc = Nothing
Set htmlBody = Nothing
Set ieTable = Nothing
Set Element = Nothing

End Sub

Public Function CreateHTMLDoc() As MSHTML.HTMLDocument
    Set CreateHTMLDoc = CreateObject("htmlfile")
End Function

注意事项

  • 使用前请确保VBA引用中已经勾选Microsoft HTML Object Library和Microsoft XML, v6.0,否则会报变量类型错误。
  • 若请求返回空值,可打开对应网页刷新后抓包更新请求参数中的smlID即可正常使用。

内容的提问来源于stack exchange,提问作者Karol Sokol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:54:03