如何从NSE网站导入Issued Cap等数据到Google Sheets
问题根因
内置导入函数无法获取数据的核心原因有两点:
- NSE公开API设置了反爬校验,要求请求携带合法的浏览器User-Agent、Referer请求头,且需要先访问官网主页获取有效会话Cookie,Google Sheets内置函数不支持自定义请求头、维持会话,所有请求会被直接拦截,拿不到真实返回内容
IMPORTHTML、IMPORTXML仅支持解析静态HTML/XML结构内容,目标接口返回的是JSON格式数据,本身就不符合这两个函数的解析要求,必然返回报错。
可落地解决方案
方案1:自定义函数自动拉取(支持自动刷新,最稳定)
通过Google Apps Script编写自定义函数,模拟正常浏览器请求逻辑绕过校验,操作步骤如下:
- 打开目标Google Sheets文件,点击顶部菜单栏「扩展程序」→「Apps Script」进入脚本编辑页
- 清空编辑器内默认的示例代码,粘贴以下代码:
function GET_NSE_CAP(symbol) { const reqHeaders = { "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", "Referer": `https://www.nseindia.com/get-quotes/equity?symbol=${symbol}`, "Accept": "application/json" } // 先请求官网首页获取有效会话Cookie UrlFetchApp.fetch("https://www.nseindia.com", {headers: reqHeaders}) // 请求目标股权行情接口 const apiRes = UrlFetchApp.fetch(`https://www.nseindia.com/api/quote-equity?symbol=${symbol}`, {headers: reqHeaders}) const resJson = JSON.parse(apiRes.getContentText()) // 提取指定字段,适配2022-06-11版本接口结构 const issuedCap = resJson.securityInfo.issuedCap const freeFloatMktCap = resJson.securityInfo.ffmc // 返回二维数组,自动横向填充两个单元格 return [[issuedCap, freeFloatMktCap]] }
- 点击编辑器顶部保存按钮,给项目自定义命名(比如NSEData),首次运行时按照弹窗提示完成Google账号授权:选择「高级」→「转到(你的项目名)」即可,这是Google官方的脚本安全校验,无数据安全风险
- 回到表格页面,在需要展示数据的单元格输入公式
=GET_NSE_CAP("TRITURBINE"),回车后当前单元格会返回Issued Cap.数值,右侧相邻单元格自动填充Free Float Market Cap数值。如果需要设置数据自动刷新,可以在脚本里添加时间驱动触发器,设置固定间隔自动重算即可。
方案2:手动导入方案(无需写代码,仅适合一次性取数)
如果不需要数据自动更新,可以用手动方式快速取数:
- 用本地浏览器打开目标API地址,确认页面正常返回JSON格式的全量数据后,全选复制所有文本内容
- 回到Google Sheets,点击顶部菜单栏「数据」→「导入」,选择粘贴的JSON内容,按照导入向导选择解析为结构化表格,之后手动定位到需要的两个字段即可。该方案缺点是数据无法自动更新,每次获取最新值都需要重复复制粘贴操作。
内容的提问来源于stack exchange,提问作者pk1978
相关产品推荐
相关产品推荐

