使用 Google 个电子表格导入 XML 并随时间保存结果

ImportXML using Google Spreadsheets and Save Results Over-Time

我在 Google 电子表格上使用 ImportXML 来抓取 YouTube 搜索结果并捕获我正在跟踪的视频的排名。

=IMPORTXML("https://www.youtube.com/results?search_query=control+theory&page=1"),"//div[@class='yt-lockup-byline']//a")

抓取效果很好(我得到了第一页的所有结果)。然后我查找 YouTube 结果的位置并将其保存在一个单元格中。

但是,我遇到的问题是当我试图跟踪该排名时随着时间的推移。不知道该怎么做,但我正在寻找一种方法来每天 运行 =ImportXML 函数(是否有刷新命令?)并每次将该单元格的结果保存在新行中函数是 运行。

有什么想法吗?

importXML 输出会自动更新(大约每两个小时一次),但您仍然需要一个脚本将过去的值保存在某处:通常,在另一个 sheet 上。使用工具 > 脚本编辑器输入以下内容,调整 sheet 名称和具有感兴趣值的单元格。使用 Resources > Current project's triggers 将其设置为每天或每周 运行。

function storeValue() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Sheet1');  // where importXML is
  var value = sheet.getRange("B3").getValue(); // where the cell of interest is
  var sheet2 = ss.getSheetByName('Sheet2'); // where to store the data
  var height = sheet2.getLastRow();   
  sheet2.insertRowAfter(height);
  sheet2.getRange(height+1, 1, 1, 2).setValues([[new Date(), value]]);
}

在每个 运行,脚本在 Sheet2 的底部附加两个单元格:一个带有时间戳(格式应如此),一个带有与该时间戳对应的值。

用于存储一系列值的版本,例如 B3:B7:

function storeValue() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Sheet1');  
  var values = sheet.getRange("B3:B7").getValues()[0];  
  var sheet2 = ss.getSheetByName('Sheet2'); // where to store the data
  var height = sheet2.getLastRow();   
  sheet2.insertRowAfter(height);
  sheet2.getRange(height+1, 1, 1, 6).setValues([[new Date()].concat(values)]); 
  // setting 6 cells instead of 2 on the previous line
}