Google Sheets导入Taostats指定数据遇阻,求可重构解决方案
解决Google Sheets导入taostats.io动态数据的方案
问题原因
你使用的IMPORTXML/IMPORTHTML/IMPORTDATA仅能抓取页面初始静态HTML,但taostats.io的目标数据(市值、流通供应量等)是通过JavaScript动态加载的,并不存在于初始源码中,因此这些函数无法获取到所需内容。
可行方案:Google Apps Script自定义函数
通过编写自定义脚本模拟请求页面并解析动态数据,或直接调用网站API接口(稳定性更高),实现数据的精准抓取。
方案1:解析页面内嵌的动态数据
- 打开目标Google Sheets,点击顶部菜单「扩展」→「Apps Script」。
- 删除默认代码,粘贴以下脚本:
function GET_TAO_STATS(subnetId = 1) { const url = `https://taostats.io/subnets/${subnetId}/chart`; const response = UrlFetchApp.fetch(url); const html = response.getContentText(); // 匹配页面中存储统计数据的脚本块(若页面结构更新需调整正则) const dataMatch = html.match(/window\.statsData\s*=\s*({.*?});/s); if (!dataMatch || !dataMatch[1]) return "无法定位数据"; try { const stats = JSON.parse(dataMatch[1]); // 按顺序返回所需字段:市值、流通供应量、Alpha池量、TAO池量、Alpha池占比、TAO池占比 return [ stats.marketCap, stats.circulatingSupply, stats.alphaInPool, stats.taoInPool, stats.alphaInPoolPercent, stats.taoInPoolPercent ]; } catch (e) { return `解析失败:${e.message}`; } }
- 点击「保存」,给脚本命名(例如
TaoStatsFetcher)。 - 返回Sheets,在任意单元格输入
=GET_TAO_STATS()即可获取子网1的目标数据;需获取其他子网时,输入=GET_TAO_STATS(2)(替换数字为对应子网ID)。
方案2:直接调用网站API(稳定性更高)
动态网站通常会通过API加载数据,你可以通过浏览器开发者工具(F12→「网络」标签)找到taostats的API接口(格式类似https://api.taostats.io/v1/subnets/{subnetId}/stats),然后使用以下脚本直接请求:
function GET_TAO_STATS_API(subnetId = 1) { const apiUrl = `https://api.taostats.io/v1/subnets/${subnetId}/stats`; // 替换为实际API地址 try { const response = UrlFetchApp.fetch(apiUrl); const stats = JSON.parse(response.getContentText()); // 按API返回的字段名调整以下内容 return [ stats.market_cap, stats.circulating_supply, stats.alpha_in_pool, stats.tao_in_pool, stats.alpha_in_pool_percent, stats.tao_in_pool_percent ]; } catch (e) { return `API请求失败:${e.message}`; } }
使用方式同方案1,输入=GET_TAO_STATS_API()即可获取数据。
注意事项
- 首次运行脚本时,需按提示完成授权(允许脚本访问网络资源)。
- 若taostats.io的页面结构或API接口更新,需对应调整脚本中的正则表达式或API地址。
- 可根据需求修改脚本,调整返回字段的数量或顺序。
内容的提问来源于stack exchange,提问作者Jacob Irwin
相关产品推荐
相关产品推荐

