【问题标题】:Google ImportHTML : Resource URl Not Found with Yahoo FinanceGoogle ImportHTML:在 Yahoo Finance 中找不到资源 URl
【发布时间】:2021-03-12 22:47:39
【问题描述】:

我希望从 Yahoo Finance 获取历史股票价格到 Google Sheet 并收到此错误。请协助。如果使用import xml,会怎么样?

https://au.finance.yahoo.com/quote/ASX.AX/history?p=ASX.AX

=IMPORTHTML(D7,"table",1)

Import HTML

【问题讨论】:

标签: google-apps-script google-sheets google-sheets-formula


【解决方案1】:

我相信你的目标如下。

  • 您想从https://au.finance.yahoo.com/quote/ASX.AX/history?p=ASX.AX 的 URL 中检索表格并将其放入电子表格中。

问题和解决方法:

不幸的是,似乎无法使用 URL 中的 IMPORTHTML 和 IMPORTXML 检索表。这在Jason E.'s answer中已经提到过。

但是,幸运的是,当我使用 Google Apps Script 的 UrlFetchApp 测试检索表时,我确认可以检索表。因此,在这个答案中,作为一种解决方法,我想建议使用 Google Apps 脚本来实现您的目标。示例脚本如下。

示例脚本:

请将以下示例脚本复制并粘贴到电子表格的脚本编辑器中。而且,在你使用这个脚本之前,please enable Sheets API at Advanced Google services。并且,运行myFunction的功能,请授权范围。通过此流程,从 URL 中检索表并将其放入活动工作表中。

function myFunction() {
  const url = "https://au.finance.yahoo.com/quote/ASX.AX/history?p=ASX.AX";
  const res = UrlFetchApp.fetch(url, {muteHttpExceptions: true});
  const tables = res.getContentText().match(/(<table[\w\s\S]+?<\/table>)/g);
  if (!tables || tables.length == 0) throw new Error("No tables. Please confirm URL again.");
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = spreadsheet.getActiveSheet();
  const resource = {requests: [{pasteData: {html: true, data: tables[0], coordinate: {sheetId: sheet.getSheetId()}}}]};
  Sheets.Spreadsheets.batchUpdate(resource, spreadsheet.getId());
}

结果:

上面的脚本运行时,得到如下结果。

注意:

  • 此示例脚本适用于 https://au.finance.yahoo.com/quote/ASX.AX/history?p=ASX.AX 的 URL。因此,当您更改 URL 时,脚本可能无法使用。请注意这一点。

参考资料:

【讨论】:

  • @Jia Wei Yeap 顺便说一句,如果使用 Google Apps Script 实现目标不是您预期的方向,我不得不道歉。
【解决方案2】:

Yahoo 似乎对其网站进行了一些更改,导致 Google Sheet 的 IMPORT 功能无法正常工作。这影响了他们的部分(不是全部)网页以及代码。使用 IMPORTXML 仍然会给你同样的错误。

我建议使用内置的 GOOGLEFINANCE() 函数或找到另一个可以通过 IMPORT 函数scrape-able的网站,它会为您提供所需的相同数据。

【讨论】:

  • 我避免使用 Google Finance 是因为 ASX 股票有 3 个小数位,Google Finance 会将其四舍五入为 2。需要找到过去 10 天的 MA
  • 您可以尝试使用 googlefinance marketcap/shares 手动计算价格,并将结果四舍五入到小数点后 3 位。 =ROUND(GOOGLEFINANCE("asx:asx", "marketcap")/GOOGLEFINANCE("asx:asx", "shares"), 3)
  • 使用您推荐的方法,如果我想获得过去5天的股票价格,我该怎么做?
  • 很遗憾,我推荐的方法在处理历史数据时不可用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-10
  • 1970-01-01
相关资源
最近更新 更多