Google apps script Google Sheets脚本超时解决方案
我正在构建一个脚本,它使用一个循环ImportHTML命令根据邮政编码在web上抓取天气数据,并且当前遇到了一个问题,每次运行脚本时执行超时 我当前设置脚本的方式在运行时会产生正确的结果,但考虑到脚本从数百个源中提取数据,这需要一段时间,并且不会在Google脚本的当前时间限制内完成 运行脚本的工作表使用3个选项卡:Google apps script Google Sheets脚本超时解决方案,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我正在构建一个脚本,它使用一个循环ImportHTML命令根据邮政编码在web上抓取天气数据,并且当前遇到了一个问题,每次运行脚本时执行超时 我当前设置脚本的方式在运行时会产生正确的结果,但考虑到脚本从数百个源中提取数据,这需要一段时间,并且不会在Google脚本的当前时间限制内完成 运行脚本的工作表使用3个选项卡: ZIPS,其中包含从 从中提取天气数据的站点 Blank,它只是脚本执行中使用的中间页 结果,将放置最终输出的位置 为了尽量减少读写量,我将代码从执行ImportHTML命令时写入
function getTemps() {
var googleSheet = SpreadsheetApp.getActive();
// Read in Zip code link values
var sheet = googleSheet.getSheetByName('ZIPS');
var zipArray = sheet.getDataRange().getValues();
var arrayLength = zipArray.length;
//Set up sheet values
var blankSyntaxA = 'ImportHtml("https://www.wunderground.com/cgi-bin/findweather/getForecast?query=pz:';
var blankSyntaxB = '&zip=1", "table", 1)';
var tempResult = [];
// Writing Section
var sheet = googleSheet.getSheetByName('Blank');
for (var i = 0; i < arrayLength; i++)
{
var liveSyntax = blankSyntaxA+zipArray[i][0]+blankSyntaxB;
sheet.getRange('A1').setFormula(liveSyntax);
var importedData = sheet.getDataRange().getValues();
tempResult = tempResult.concat(importedData);
}
var sheet = googleSheet.getSheetByName('Result');
sheet.getRange(1,1,tempResult.length,8).setValues(tempResult);
}
函数getTemps(){
var googleSheet=SpreadsheetApp.getActive();
//读取邮政编码链接值
var sheet=googleSheet.getSheetByName('ZIPS');
var zipArray=sheet.getDataRange().getValues();
var arrayLength=zipArray.length;
//设置图纸值
var blankSyntaxA='ImportHtml('https://www.wunderground.com/cgi-bin/findweather/getForecast?query=pz:';
var blankSyntaxB='&zip=1,“表”,1';
var tempResult=[];
//写作部分
var sheet=googleSheet.getSheetByName('Blank');
对于(变量i=0;i另一种选择是登录以将执行时间限制延长到30分钟。我可能错了,但超时不是因为中的服务加载太多而生成的吗?我试着打开它,但它已经五分钟没有响应了。我在互联网浏览器中启动wunderground.com上的服务时没有遇到任何问题,所以不确定它是否在服务端。但是,脚本运行的最大障碍似乎是for循环运行时加载ImportHTML命令所需的时间。因此,我不确定这是否与服务端有关,或者这仅仅是运行重复命令调用并在循环的每次迭代中读取/写入结果的本质。难道没有一种方法可以通过一次调用将所有需要的数据都带到服务吗?(可能会传递多个邮政编码或类似的信息)我想这就是我目前所坚持的。网站的设置方式是前3位邮政编码的链接列表,如下所示:点击链接会显示一个html表格,其中包含与链接前3位匹配的位置的天气数据,例如:我希望为每个链接提取此表格,特别是“地点”和“温度”列,但我不知道如何通过一次拉动来实现这一点,或者这是否可能。但是,您是在尝试获取每个邮政编码的信息,还是只需要几个?ImportHTML通过接收
url
、type\u\u\u html\u结构
和index\u所述结构的u代码
,这允许您通过调用ImportHTML(“https://www.wunderground.com/weather-by-zip-code.asp“,”列表“,18)
。然后,您可以使用代码查询每个起始拉链(用零填充它们以完成三位数)。这将大大减少对该服务的调用