You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Sheets抓取Yahoo加密货币历史价格失效问题求助

解决Google Sheets抓取Yahoo加密货币历史数据失效的问题

一、优先使用Google Finance内置函数(最简方案)

Google Sheets自带的GOOGLEFINANCE函数原生支持加密货币历史数据查询,稳定性远高于依赖外部页面解析的方法,推荐优先使用:

  • 查询指定日期的收盘价(以2024年8月30日、BTC-USD为例):
    =INDEX(GOOGLEFINANCE("BTCUSD", "close", DATE(2024,8,30), DATE(2024,8,30)), 2, 2)
    
    也可以直接使用时间戳:
    =INDEX(GOOGLEFINANCE("BTCUSD", "close", 1725062400, 1725062400), 2, 2)
    
    公式中INDEX用于提取返回结果里的纯数值,避免包含表头和日期行。

二、用Apps Script替代IMPORTREGEX(需Yahoo数据源时)

Yahoo Finance当前采用动态渲染技术,页面表格数据由JavaScript加载生成,静态HTML源码中已无直接可抓取的<td>内容,因此IMPORTREGEX失效。可以通过Apps Script模拟浏览器请求获取动态数据:

  1. 打开目标Google Sheets,点击「扩展程序」→「Apps Script」
  2. 替换默认代码为以下脚本:
function getYahooCryptoPrice(symbol, timestamp) {
  const url = `https://finance.yahoo.com/quote/${symbol}/history?period1=${timestamp}&period2=${timestamp}`;
  const options = {
    headers: {
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36'
    }
  };
  const response = UrlFetchApp.fetch(url, options);
  const html = response.getContentText();
  
  // 匹配收盘价的原始数值(需根据Yahoo页面结构变化调整正则)
  const regex = /"close":{"raw":(\d+\.?\d*)}/;
  const match = html.match(regex);
  return match ? parseFloat(match[1]) : "#N/A";
}
  1. 保存脚本(命名如YahooCryptoFetcher),回到Sheets中调用:
=getYahooCryptoPrice("BTC-USD", 1725062400)

注意:Yahoo页面结构可能随时更新,若公式返回#N/A,需检查并调整正则表达式匹配规则。

失效原因说明

Yahoo Finance已更新页面渲染逻辑,核心数据不再直接写入静态HTML,而是通过前端JavaScript动态加载生成。IMPORTREGEX仅能抓取页面初始加载的静态源码,因此无法获取目标数据。

内容的提问来源于stack exchange,提问作者user1864797

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 14:52:05