我正在尝试将来自不同市场的多家公司的 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 会导致问题?
非常感谢您的帮助
答案 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";
}
当使用上述脚本时,得到如下结果。
=SAMPLE("https://finance.yahoo.com/quote/WBS")
。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)
}