Google Sheets中IMPORTXML函数无法获取Garantex网站BTCUSD交易数据的问题求助
Google Sheets中IMPORTXML函数无法获取Garantex网站BTCUSD交易数据的问题求助
我来帮你分析下问题核心,以及对应的解决办法:
为什么IMPORTXML拿不到你要的数字?
Garantex网站上的交易数据(就是你截图里红线标注的买卖盘价格/数量)是通过JavaScript动态渲染出来的——简单说就是页面加载完成后,浏览器才会运行JS去服务器拉取真实数据并展示在页面上。而Google Sheets的IMPORTXML只能抓取页面初始加载时就存在的静态HTML代码,根本看不到JS动态生成的内容,这就是你只拿到BTC这类静态文本,却获取不到交易数字的核心原因。
另外你写的XPath//table1本身也是错误的,HTML里没有table1这个标签,正确的表格标签是table,但就算改成//table也没用,因为表格里的数字是动态填充的。
解决办法推荐(按优先级排序)
1. 优先使用Garantex的公开API(最可靠)
Garantex提供了公开的API接口,能直接获取结构化的交易数据,比用IMPORTXML靠谱太多。你可以用IMPORTDATA函数调用API,再配合JSON_EXTRACT提取需要的数字:
- 获取BTCUSD订单簿的完整数据:
=IMPORTDATA("https://garantex.io/api/v2/depth?market=btcusd") - 提取**卖一(最低卖价)**的价格:
=JSON_EXTRACT(IMPORTDATA("https://garantex.io/api/v2/depth?market=btcusd"), "$.asks[0][0]") - 提取**买一(最高买价)**的价格:
注:=JSON_EXTRACT(IMPORTDATA("https://garantex.io/api/v2/depth?market=btcusd"), "$.bids[0][0]")asks代表卖盘列表,bids代表买盘列表,[0]取第一个(最优价格),第二个[0]对应价格,[1]对应数量。
2. 用Google Apps Script抓取动态内容(备选方案)
如果API不能满足你的需求,或者你想模拟浏览器获取页面渲染后的内容,可以用Google Apps Script来实现:
- 打开你的Google表格,点击顶部菜单栏的「扩展程序」→「Apps Script」;
- 清空默认代码,粘贴以下脚本:
function getGarantexBTCPrice() { const targetUrl = "https://garantex.io/trading/btcusd?lang=en"; // 先获取页面原始HTML const rawHtml = UrlFetchApp.fetch(targetUrl).getContentText(); // 利用HtmlService解析JS渲染后的页面内容 const renderedContent = HtmlService.createHtmlOutput(rawHtml).getContent(); // 用正则表达式匹配卖一价格(可根据需求调整正则) const priceMatch = renderedContent.match(/<td class="price">(\d+\.?\d*)<\/td>/); if (priceMatch) { return parseFloat(priceMatch[1]); } else { return "无法获取数据"; } } - 保存脚本(给项目起个名字,比如「Garantex数据抓取」);
- 回到表格,在任意单元格输入
=getGarantexBTCPrice(),第一次运行需要授权,授权后就能拿到动态渲染的价格了。
注意事项
- API调用有频率限制,不要过于频繁刷新;
- Google Apps Script的正则表达式可能需要根据网站页面结构的调整而修改;
- 如果网站更新了页面结构或API接口,对应的公式/脚本可能需要同步调整。
备注:内容来源于stack exchange,提问作者Александр Брайловский
相关产品推荐
相关产品推荐

