4

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

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

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

但是,我遇到的问题是当我试图跟踪该排名。不确定如何执行此操作,但我正在寻找一种=ImportXML每天运行该函数的方法(是否有刷新命令?)并在每次运行该函数时将该单元格的结果保存在新行中。

有任何想法吗?

4

1 回答 1

6

importXML输出会自动更新(大约每两个小时),但您仍然需要一个脚本来将过去的值保存在某处:通常是在另一张纸上。使用工具 > 脚本编辑器输入以下内容,使用感兴趣的值调整工作表名称和单元格。使用资源 > 当前项目的触发器将其设置为每天或每周运行。

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
}
于 2016-05-27T21:01:36.773 回答