【问题标题】:IMPORTHTML() doesn't work in this webpage structureIMPORTHTML() 在此网页结构中不起作用
【发布时间】:2021-01-16 16:11:43
【问题描述】:

我想从 HTML 页面中的表中导入数据。我将谷歌的示例IMPORTHTML("http://en.wikipedia.org/wiki/Demographics_of_India","table",4) 应用到我的案例中,更改了各种参数,但它毕竟不起作用。

谁能告诉我下面的公式有什么问题?

=IMPORTHTML("https://s.cafef.vn/screener.aspx#data","table",1)

我想从https://s.cafef.vn/screener.aspx#data 导入表格 表格的前 2 行如下所示:

1 Công ty cổ phần 32 A32 UpCom -15.42 212.16 -100.00 6.91 4.52 0.00 31.20 2 Công ty Cổ phần Nhựa An Phát Xanh AAA HSX 0.00 3,426.19 -5.24 1.39 11.09 0.78 0.00 ......

我尝试将表的索引从 1 提高到 30,但它们都不起作用

=IMPORTHTML("https://s.cafef.vn/screener.aspx#data","table",2)
=IMPORTHTML("https://s.cafef.vn/screener.aspx#data","table",3)
...
=IMPORTHTML("https://s.cafef.vn/screener.aspx#data","table",30)

非常感谢您提前 曹

【问题讨论】:

  • 表由 JavaScript 控制。 google sheet 无法导入 JS 元素

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


【解决方案1】:

我相信你的目标如下。

  • 您想从https://s.cafef.vn/screener.aspx#data 的 URL 中检索表。

问题和解决方法:

当我看到 URL 的 HTML 时,似乎该表是由 Javascript 创建的。在这种情况下,IMPORTHTML 无法直接检索该表。 the comment 已经提到了这一点。

幸运的是,当我看到 HTML 时,我注意到 Javascript 创建的表格设置为 JSON 数据。在这种情况下,我认为当检索 JSON 数据时,可能能够使用 Google Apps 脚本检索表的值。在这个答案中,作为一种解决方法,我想建议使用 Google Apps 脚本作为自定义函数来实现您的目标。

示例脚本:

请将以下脚本复制并粘贴到电子表格的脚本编辑器中。并且,请将=SAMPLE("https://s.cafef.vn/screener.aspx#data") 的自定义公式放入单元格中。通过这种方式,获取并解析 HTML 数据,然后从 JSON 数据中获取表。

function SAMPLE(url) {
  const res = UrlFetchApp.fetch(url, {muteHttpExceptions: true});
  const html = res.getContentText().match(/var jsonData \=([\S\s\w]+\}\])/);
  if (!html) return "No tables. Please confirm URL again.";
  const table = JSON.parse(html[1].replace(/\n/g, ""));
  const header = ["", "FullName", "Symbol", "CenterName", "ChangePrice", "VonHoa", "ChangeVolume", "EPS", "PE", "Beta", "Price"];
  return table.reduce((ar, e, i) => {
    const temp = header.map(f => f == "" ? i + 1 : e[f]);
    ar.push(temp);
    return ar;
  }, [header]);
}

结果:

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

注意:

  • 在此示例脚本中,使用了const header = ["", "FullName", "Symbol", "CenterName", "ChangePrice", "VonHoa", "ChangeVolume", "EPS", "PE", "Beta", "Price"]; 的标头。这是您要检索的表。这些是 JSON 数据的键。
  • 此示例脚本可用于https://s.cafef.vn/screener.aspx#data URL 的当前HTML。因此,当您更改 URL 并更新站点并更改 HTML 结构时,此脚本可能无法使用。所以请注意这一点。

参考资料:

【讨论】:

  • @Cao Doremi 欢迎您。谢谢你让我知道。对不起。我刚才注意到你的评论。我很高兴你的问题得到了解决。如果您的问题得到解决,请按接受按钮。与您有相同问题的其他人也可以将您的问题作为可以解决的问题。我认为您的问题和解决方案将对他们有用。如果找不到按钮,请随时告诉我。 stackoverflow.com/help/accepted-answer 顺便说一句,您的评论是作为答案。在这种情况下,请将其放在我的回答中的评论中。这样,它会通知我。
猜你喜欢
  • 1970-01-01
  • 2023-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-08
  • 2010-10-09
相关资源
最近更新 更多