将 =ImportHTML 替换为 URLFetchApp
Replacing =ImportHTML with URLFetchApp
我一直在使用 ImportHTML 从这个 link 中提取 MLB 统计数据,没有问题:“https://widgets.sports-reference.com/wg.fcgi?css=1&site=br&url=%2Fleagues%2FMLB%2F2021-standard-batting.shtml&div=div_players_standard_batting"。我只是在 Google Sheet.
上复制 table
但是,源 table 现在已经变得如此之大,以至于我在 Sheet 中收到此错误:“资源 url 的内容超出了最大大小。”
我知道我需要转向 Google Apps 脚本和 URLFetchApp,但我的业余方法只会产生空单元格。我可以使用这种方法在我的 link 中重现 table 吗?
感谢您的指导和宝贵时间。
从 table 检索数据的更好方法:
function importTableHTML(url) {
var html = '<table' + UrlFetchApp.fetch(url).getContentText().match(/(?<=\<table).*(?=\<\/table)/g) + '</table>';
var trs = [...html.matchAll(/<tr[\s\S\w]+?<\/tr>/g)];
var data = [];
for (var i=0;i<trs.length;i++){
var tds = [...trs[i][0].matchAll(/<(td|th)[\s\S\w]+?<\/(td|th)>/g)];
var prov = [];
for (var j=0;j<tds.length;j++){
donnee=tds[j][0].match(/(?<=\>).*(?=\<\/)/g)[0].replace(/ /g,' ');
if(donnee.indexOf("</a>")>-1){
prov.push(donnee.match(/(?<=\>).*(?=\<\/)/g)[0]);
}else{
prov.push(donnee);
}
}
data.push(prov);
}
return(data);
}
我一直在使用 ImportHTML 从这个 link 中提取 MLB 统计数据,没有问题:“https://widgets.sports-reference.com/wg.fcgi?css=1&site=br&url=%2Fleagues%2FMLB%2F2021-standard-batting.shtml&div=div_players_standard_batting"。我只是在 Google Sheet.
上复制 table但是,源 table 现在已经变得如此之大,以至于我在 Sheet 中收到此错误:“资源 url 的内容超出了最大大小。”
我知道我需要转向 Google Apps 脚本和 URLFetchApp,但我的业余方法只会产生空单元格。我可以使用这种方法在我的 link 中重现 table 吗?
感谢您的指导和宝贵时间。
从 table 检索数据的更好方法:
function importTableHTML(url) {
var html = '<table' + UrlFetchApp.fetch(url).getContentText().match(/(?<=\<table).*(?=\<\/table)/g) + '</table>';
var trs = [...html.matchAll(/<tr[\s\S\w]+?<\/tr>/g)];
var data = [];
for (var i=0;i<trs.length;i++){
var tds = [...trs[i][0].matchAll(/<(td|th)[\s\S\w]+?<\/(td|th)>/g)];
var prov = [];
for (var j=0;j<tds.length;j++){
donnee=tds[j][0].match(/(?<=\>).*(?=\<\/)/g)[0].replace(/ /g,' ');
if(donnee.indexOf("</a>")>-1){
prov.push(donnee.match(/(?<=\>).*(?=\<\/)/g)[0]);
}else{
prov.push(donnee);
}
}
data.push(prov);
}
return(data);
}