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

使用IMPORTHTML导入MetalsDaily金属价格表,谷歌表格数值缺失求助

解决Google Sheets IMPORTHTML导入MetalsDaily金属价格数值不显示的问题

问题根源

MetalsDaily网站的「LIVE METALS PRICES」表格内的价格数值是通过JavaScript动态渲染生成的,而IMPORTHTML函数仅能抓取页面初始加载时的静态HTML内容,无法解析或执行JavaScript,因此会出现表格结构正常但数值为空的情况。

解决方案1:用Google Apps Script抓取动态内容

这是最可靠的解决方式,步骤如下:

  1. 打开目标Google Sheet,点击菜单栏「扩展程序」→「Apps Script」进入脚本编辑器。
  2. 删除默认代码,粘贴以下脚本:
function fetchMetalsPrices() {
  const targetUrl = "https://www.metalsdaily.com";
  const fetchOptions = {muteHttpExceptions: true};
  const response = UrlFetchApp.fetch(targetUrl, fetchOptions);
  const pageHtml = response.getContentText();

  // 解析页面DOM,提取表格数据(若网站更新结构需调整XPath规则)
  const xmlDoc = XmlService.parse(pageHtml);
  const rootElement = xmlDoc.getRootElement();
  const htmlNamespace = rootElement.getNamespace();

  const tableRows = xmlDoc.getDescendants(XmlService.getNamespace("http://www.w3.org/1999/xhtml"), "tr");
  const priceData = [];

  tableRows.forEach(row => {
    const cells = row.getChildren("td", htmlNamespace);
    if (cells.length > 0) {
      const rowContent = cells.map(cell => cell.getText().trim());
      priceData.push(rowContent);
    }
  });

  // 将数据写入当前Sheet的A1起始位置
  const activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  activeSheet.clearContents();
  activeSheet.getRange(1, 1, priceData.length, priceData[0]?.length || 0).setValues(priceData);
}
  1. 保存脚本(命名如MetalsPriceScraper),点击运行按钮,首次运行需授权脚本访问权限。
  2. 若需要自动更新,可在脚本编辑器左侧点击「触发器」图标,设置定时执行规则(比如每5分钟更新一次)。

解决方案2:尝试提取页面静态数据源

部分动态网站会在页面<script>标签中嵌入JSON格式的数据源,可尝试用IMPORTXML提取后解析:
在Sheet单元格中输入公式:

=IMPORTXML("https://www.metalsdaily.com", "//script[contains(text(), 'livePrices')]/text()")

若提取到有效数据,可搭配REGEXEXTRACT、SPLIT等函数解析出价格数值。

注意:网站的DOM结构或数据源格式可能随时变更,若后续脚本/公式失效,需重新分析页面结构调整规则。

内容的提问来源于stack exchange,提问作者Ong K.S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 16:51:01