我想从HTML页面中的表中导入数据。我将Google的例子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 UpCom -15.42 212.16 -100.00 6.91 4.52 0.00 31.20 cổần Nhựa An Phát Xanh AAA HSX 0.00 426.19 -5.24 1.39 1.39 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)非常感谢曹先生
发布于 2021-01-17 01:35:17
我相信你的目标如下。
https://s.cafef.vn/screener.aspx#data的URL中检索表。问题和解决办法:
当我看到URL的HTML时,表似乎是由Javascript创建的。在这种情况下,IMPORTHTML无法直接检索表。评论已经提到了这一点。
幸运的是,当我看到HTML时,我注意到用于创建由Javascript创建的表被设置为一个JSON数据。在本例中,我认为当检索JSON数据时,可以使用Google脚本检索表的值。在这个答案中,作为一种解决办法,我建议使用Google脚本作为自定义函数来实现您的目标。
示例脚本:
请将以下脚本复制并粘贴到电子表格的脚本编辑器中。并且,请将=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结构时,此脚本可能无法使用。所以请小心点。参考文献:
https://stackoverflow.com/questions/65751703
复制相似问题