首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >更有效地从数十个特定网页的变体中提取特定值

更有效地从数十个特定网页的变体中提取特定值
EN

Stack Overflow用户
提问于 2021-05-16 04:44:04
回答 1查看 38关注 0票数 0

我正在使用Google Sheets从一个网页的几十次迭代中提取单个值。除了不断变化的用户ID和特定月份的数字之外,每个页面的URL几乎是相同的。

我的函数当前设置了一个等于IMPORTXML公式的单元格,其中包含用于说明更改的变量。然而,我最终将有超过600个请求需要完成,而Google Sheets在处理那么多请求时往往会花费永远/中断的时间。

这些数据每月只需要拉取一次。

代码语言:javascript
运行
复制
    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,但是,我无法找到一种只获取我需要的数据的方法。

我需要一个特定标签中的值,如下所示。

代码语言:javascript
运行
复制
<div class ="gs-rd">
      <div></div>
      <div>
             <span> **THIS ONE IS THE ONE I NEED** </span>
             <span></span>
      </div>
</div>
EN

回答 1

Stack Overflow用户

发布于 2021-05-16 06:46:50

不确定函数IMPORTXML,但这种填充单元格的方法是非常错误的:

代码语言:javascript
运行
复制
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)方法一步完成单元填充。

如下所示:

代码语言:javascript
运行
复制
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()都需要很长时间才能执行。你应该尽可能少用它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67551055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档