Google Sheets ImportXML 为 yahoo Finance 返回“未找到 URL 上的资源”(带有“.”的股票)

问题描述 投票:0回答:1

我一直在尝试用国际股票制作谷歌表格投资组合。我已经成功地使用了“googlefinance”公式,但它并没有涵盖很多国际(美国以外)股票。所以我一直在尝试将它与XPath和雅虎财经相适应。不幸的是,我再次发现我对股票有一些限制。

已测试的 TICKERS(ORCL NVDA LUNR SHELL.AS SIE.DE NESN.SW MSFT TSLA NSRGY NESM.F AAPL.NE ENR.DE AAPL)

我使用的公式是:

=index(IMPORTXML("https://finance.yahoo.com/quote/"&A11,"//*[@class='livePrice svelte-mgkamr']//span"),1)

我看到的是,当链接具有“SMTH.SM”时,它不起作用。否则就是这样。但有一件事困扰着我 - SIE.DE 不知何故工作得很好。

有什么想法吗?我希望即使是名称中带有点的股票,我也能够提取信息。 我尝试按原样使用链接(例如https://finance.yahoo.com/quote/SHELL.AS)而不是单元格,但它仍然不起作用。

google-sheets yahoo-finance
1个回答
0
投票

尝试:

function YAHOO(url) {
  const res = UrlFetchApp.fetch(url, {muteHttpExceptions: true});
  const htmlContent = res.getContentText();

  // Use regex to find the specific span element containing the price
  const regex = /<span[^>]*>(.*?)<\/span>/g;
  let match;
  let price = "Price not found.";

  while ((match = regex.exec(htmlContent)) !== null) {
    if (match.index === regex.lastIndex) {
      regex.lastIndex++;
    }
    // Check if this span matches the specific path by its surrounding elements
    const precedingText = htmlContent.substring(0, match.index);
    const followingText = htmlContent.substring(match.index + match[0].length);

    if (precedingText.includes('<fin-streamer') && followingText.includes('</fin-streamer>')) {
      price = match[1];
      break;
    }
  }

  return price;
}

因为导入公式可以关闭(请参阅:https://stackoverflow.com/a/66064380/5632629

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.