我正在使用Google Sheets从一个网页的几十次迭代中提取单个值。除了不断变化的用户ID和特定月份的数字之外,每个页面的URL几乎是相同的。
我的函数当前设置了一个等于IMPORTXML公式的单元格,其中包含用于说明更改的变量。然而,我最终将有超过600个请求需要完成,而Google Sheets在处理那么多请求时往往会花费永远/中断的时间。
这些数据每月只需要拉取一次。
var sSheet = SpreadsheetApp.getActiveSpreadsheet();
var uniqueSheet = sSheet.getSheetByName("Sheet2");
var uniqueLastColumn = uniqueSheet.getLastColumn() + 1;
var players = [654270, 601000, 335700, 636969, 344585];
var numPlayers = players.length;
var currPlayer = 0;
var row = 1;
var currMonth = 0;
var maxMonth = 12;
for (currPlayer = 0; currPlayer < numPlayers; currPlayer++) {
for (currMonth = 0; currMonth < maxMonth; currMonth++) {
tarRange = uniqueSheet.getRange(row, (uniqueLastColumn + currMonth)).setValue('=importXML("https://www.trueachievements.com/gamerperiodsummary.aspx?gamerid=' + players[currPlayer] + '&year=2021&month=' + currMonth + '", "/html/body/form/div[2]/div[2]/main/div[4]/div[1]/div/div[2]/span[1]") ');
}
row++;
uniqueLastColumn = 1;
}
}
有没有更有效的方法来获取这些数据?
我尝试了其他变体,包括不使用XmlService,但是,我无法找到一种只获取我需要的数据的方法。
我需要一个特定标签中的值,如下所示。
<div class ="gs-rd">
<div></div>
<div>
<span> **THIS ONE IS THE ONE I NEED** </span>
<span></span>
</div>
</div>
发布于 2021-05-15 22:46:50
不确定函数IMPORTXML
,但这种填充单元格的方法是非常错误的:
for (currPlayer = 0; currPlayer < numPlayers; currPlayer++) {
for (currMonth = 0; currMonth < maxMonth; currMonth++) {
tarRange = uniqueSheet.getRange(row, (uniqueLastColumn + currMonth))
.setValue('=importXML("https://www.trueachievements.com/gamerperiodsummary.aspx?gamerid='
+ players[currPlayer] + '&year=2021&month='
+ currMonth + '", "/html/body/form/div[2]/div[2]/main/div[4]/div[1]/div/div[2]/span[1]") ');
}
row++;
uniqueLastColumn = 1;
}
你需要先做一个二维数组,然后用range.setValues(array)
方法一步完成单元填充。
如下所示:
var tarRange_all = uniqueSheet.getRange(1,1,100,100); // put here your real range
var s1 = '=importXML("https://www.trueachievements.com/gamerperiodsummary.aspx?gamerid=';
var s2 = '&year=2021&month=';
var s3 = '", "/html/body/form/div[2]/div[2]/main/div[4]/div[1]/div/div[2]/span[1]") ';
var table = []; // the array
for (currPlayer = 0; currPlayer < numPlayers; currPlayer++) {
var table_row = [];
for (currMonth = 0; currMonth < maxMonth; currMonth++) {
table_row.push(s1 + players[currPlayer] + s2 + currMonth + s3);
}
table.push(table_row);
}
tarRange_all.setValues(table); // fill all cells at once
每个setValue()
或getValue()
都需要很长时间才能执行。你应该尽可能少用它。
https://stackoverflow.com/questions/67551055
复制相似问题