Google 表格 IMPORTXML 对于 ASX 数据失败

时间:2021-05-11 04:09:04

标签: google-sheets-formula

我正在尝试将来自不同市场的多家公司的 https://finance.yahoo.com/ 的“远期股息和收益率”值提取到 Google 表格中。

这是成功的:

=IMPORTXML("https://finance.yahoo.com/quote/WBS", "//*[@id='quote-summary']/div[2]/table/tbody/tr[6]/td[2]")

但这因 #N/A 而失败:

=IMPORTXML("https://finance.yahoo.com/quote/CBA.AX", "//*[@id='quote-summary']/div[2]/table/tbody/tr[6]/td[2]")

我无法弄清楚 ASX 股票代码需要什么不同,为什么 CBA.AX 会导致问题?

非常感谢您的帮助

2 个答案:

答案 0 :(得分:1)

当我测试=IMPORTXML("https://finance.yahoo.com/quote/CBA.AX", "//*")的公式时,出现了Error Resource at url not found.的错误。我认为这可能是您出现问题的原因。

但是,幸运的是,当我尝试使用 Google Apps 脚本从同一 URL 检索 HTML 时,可以检索到 HTML。因此,在这个答案中,我想建议使用 Google Apps Script 创建的自定义函数来检索值。示例脚本如下。

示例脚本:

请将以下脚本复制粘贴到谷歌电子表格的脚本编辑器中并保存。并且,请将 =SAMPLE("https://finance.yahoo.com/quote/CBA.AX") 的公式放入单元格。借此,该值被检索。

function SAMPLE(url) {
  const res = UrlFetchApp.fetch(url).getContentText().match(/DIVIDEND_AND_YIELD-value.+?>(.+?)</);
  return res && res.length > 1 ? res[1] : "No value";
}

结果:

当使用上述脚本时,得到如下结果。

enter image description here

注意:

  • 使用此脚本时,您还可以使用 =SAMPLE("https://finance.yahoo.com/quote/WBS")
  • 在这种情况下,当 URL 的 HTML 结构发生变化时,此脚本可能无法使用。我认为这种情况与 IMPORTXML 和 xpath 相同。所以请注意这一点。

参考:

答案 1 :(得分:1)

另一种解决方案是解码网页源代码中包含的json。当然,您不能使用 importxml,因为该网页是由 javascript 构建在您身边,而不是在服务器端。可以通过这种方式访问​​数据,获取大量信息

  var source = UrlFetchApp.fetch(url).getContentText()
  var jsonString = source.match(/(?<=root.App.main = ).*(?=}}}})/g) + '}}}}'

即对于您正在寻找的内容,您可以使用

function trailingAnnualDividendRate(){
  var url='https://finance.yahoo.com/quote/CBA.AX'
  var source = UrlFetchApp.fetch(url).getContentText()
  var jsonString = source.match(/(?<=root.App.main = ).*(?=}}}})/g) + '}}}}'
  var data = JSON.parse(jsonString)
  var dividendRate = data.context.dispatcher.stores.QuoteSummaryStore.summaryDetail.trailingAnnualDividendRate.raw
  Logger.log(dividendRate)
}