如何抓取克利夫兰联储通胀数据并导入Google Sheets
克利夫兰联储通胀预测表格导入Google Sheets解决方案
目标站点设置了反爬校验,且部分内容通过客户端脚本渲染,IMPORTDATA/IMPORTHTML/IMPORTXML这类原生函数无法通过反爬校验,也拿不到渲染完成的DOM结构,因此抓取失败,可通过以下方案实现需求:
方案1:使用Google Apps Script抓取(最适配Google Sheets)
操作步骤
- 打开目标Google Sheets,点击顶部菜单栏「扩展程序」>「Apps Script」进入脚本编辑器
- 删除编辑器内默认的
myFunction示例代码,粘贴以下代码:
function fetchInflationNowcasting() { // 配置请求头模拟浏览器访问,绕过基础反爬 const options = { headers: { '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' }, muteHttpExceptions: true }; const url = 'https://www.clevelandfed.org/our-research/indicators-and-data/inflation-nowcasting.aspx'; const response = UrlFetchApp.fetch(url, options); const html = response.getContentText(); // 解析月度表格 const monthlyTable = parseTable(html, 'Monthly Inflation Nowcasting'); // 解析季度表格 const quarterlyTable = parseTable(html, 'Quarterly Inflation Nowcasting'); // 写入数据到当前表格,可修改Sheet名称自定义存储位置 const ss = SpreadsheetApp.getActiveSpreadsheet(); if (monthlyTable.length) { const monthlySheet = ss.getSheetByName('月度通胀预测') || ss.insertSheet('月度通胀预测'); monthlySheet.clearContents(); monthlySheet.getRange(1, 1, monthlyTable.length, monthlyTable[0].length).setValues(monthlyTable); } if (quarterlyTable.length) { const quarterlySheet = ss.getSheetByName('季度通胀预测') || ss.insertSheet('季度通胀预测'); quarterlySheet.clearContents(); quarterlySheet.getRange(1, 1, quarterlyTable.length, quarterlyTable[0].length).setValues(quarterlyTable); } } function parseTable(html, tableTitle) { // 匹配标题对应的表格块 const titleRegex = new RegExp(`${tableTitle}[\\s\\S]*?<table[\\s\\S]*?>([\\s\\S]*?)</table>`, 'i'); const tableMatch = html.match(titleRegex); if (!tableMatch) return []; const tableHtml = tableMatch[1]; // 提取行数据 const rowRegex = /<tr[\\s\\S]*?>([\\s\\S]*?)</tr>/gi; const rows = []; let rowMatch; while ((rowMatch = rowRegex.exec(tableHtml)) !== null) { const rowHtml = rowMatch[1]; // 提取单元格数据 const cellRegex = /<t[hd][\\s\\S]*?>([\\s\\S]*?)</t[hd]>/gi; const cells = []; let cellMatch; while ((cellMatch = cellRegex.exec(rowHtml)) !== null) { // 清理单元格内的HTML标签和空白字符 const cellText = cellMatch[1].replace(/<[^>]+>/g, '').trim(); cells.push(cellText); } if (cells.some(cell => cell)) rows.push(cells); } return rows; }
- 点击编辑器顶部的保存按钮,项目名称任意填写,然后选中
fetchInflationNowcasting函数,点击运行按钮,按照提示完成Google账号授权(授权提示为未验证应用时,点击「高级」>「前往[项目名]」即可继续) - 运行完成后回到Google Sheets,会自动生成「月度通胀预测」「季度通胀预测」两个Sheet,对应你需要的两张表格数据
后续更新操作
需要刷新数据时,重新打开Apps Script运行该函数即可,也可以设置脚本触发器,按天/周自动更新数据。
方案2:直接抓取官方CSV数据源(更稳定)
目标站点公开了对应数据的CSV下载端点,不需要解析HTML,抓取效率更高且数据格式更规整:
- 找到页面内对应表格的CSV下载地址,替换到上述脚本的请求URL中,直接用
Utilities.parseCsv()解析返回内容即可,不需要写HTML解析逻辑。
注意事项
- 请求频率不要高于1次/小时,避免触发站点反爬限制导致权限被封禁
- 若站点页面结构更新导致解析失败,调整
parseTable函数内的匹配规则即可
内容的提问来源于stack exchange,提问作者mancoder
相关产品推荐
相关产品推荐

