如何用Excel Power Query抓取Investing.com2020年至今的经济日历数据?
Power Query抓取Investing.com经济日历完整数据方案
核心问题分析
直接在URL后加date_from/date_to参数无效,是因为该页面的日历数据通过POST请求动态加载,而非GET请求传递参数。需找到正确的API接口和请求参数格式。
解决方案步骤
1. 确认目标API接口
打开浏览器开发者工具(F12),切换到「网络」标签后刷新页面:
- 筛选XHR/Fetch请求,找到名称类似
getCalendarFilteredData的POST请求 - 查看该请求的请求体(RequestBody)和请求头(Headers),确认参数规则
2. 在Power Query中构造请求
新建空白查询,粘贴以下M代码(按需调整参数):
let // 自定义日期范围:起始设为2020-01-01,结束为当前日期 StartDate = #date(2020, 1, 1), EndDate = DateTime.Date(DateTime.LocalNow()), // 转换为网站要求的Unix时间戳(秒) StartTimestamp = Number.From(StartDate) * 86400, EndTimestamp = Number.From(EndDate) * 86400, // 构造请求体,customEvents对应原URL的1762,timeZone按需调整 RequestBody = Json.FromValue([ dateFrom = StartTimestamp, dateTo = EndTimestamp, timeZone = 1, eventsType = "custom", customEvents = "1762" ]), // 模拟浏览器请求头,避免被拦截 Headers = [ #"Content-Type" = "application/json", #"User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" ], // 发送POST请求 Response = Web.Contents("https://it.investing.com/economic-calendar/getCalendarFilteredData", [ Headers = Headers, Content = RequestBody, ManualStatusHandling = {404, 403, 500} ]), // 解析返回的JSON数据 JsonData = Json.Document(Response), DataArray = JsonData[data], // 转换为表格并处理日期列 ResultTable = Table.TransformColumns( Table.FromRecords(DataArray), { ("event_date_utc", each DateTime.From(Number.From(_)/86400 + #datetime(1970,1,1,0,0,0))), ("event_date", each DateTime.From(Number.From(_)/86400 + #datetime(1970,1,1,0,0,0))) } ), // 按需保留需要的列(示例保留常用列) FinalTable = Table.SelectColumns(ResultTable, {"event_date", "currency", "event", "actual", "forecast", "previous"}) in FinalTable
3. 调整与注意事项
- 时区参数:
timeZone的值需根据页面显示的时区调整(可从浏览器抓包的请求体中获取准确值) - 请求拦截:如果返回403/500错误,更新
User-Agent为当前浏览器的真实UA - API变更:Investing.com的API参数可能随时调整,若代码失效,重新抓包确认最新请求参数
内容的提问来源于stack exchange,提问作者Ricter
相关产品推荐
相关产品推荐

