用 URLFetchApp 替换 =ImportHTML

问题描述

我一直在使用 ImportHTML 从这个链接提取 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 表格上复制表格。

但是,源表现在变得如此之大,以至于我的工作表中出现此错误:“url 内容中的资源超出了最大大小。”

我知道我需要转向 Google Apps Script 和 URLFetchApp,但我的业余方法只产生空单元格。我可以使用这种方法在我的链接中重现表格吗?

感谢您的指导和您的时间。

解决方法

我通过从标签中删除所有属性来简化源代码,然后解析表...

100
,

从表中检索数据的更好方法:

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(/&nbsp;/g,' ');
      if(donnee.indexOf("</a>")>-1){
        prov.push(donnee.match(/(?<=\>).*(?=\<\/)/g)[0]);
      }else{
        prov.push(donnee);
      }
    }
    data.push(prov);
  }
  return(data);
}