【问题标题】:ImportXML using Google Spreadsheets and Save Results Over-TimeImportXML 使用 Google 电子表格并随时间保存结果
【发布时间】:2016-05-27 18:58:07
【问题描述】:

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

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

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

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

有什么想法吗?

【问题讨论】:

    标签: google-sheets google-sheets-importxml


    【解决方案1】:

    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
    }
    

    【讨论】:

    • 效果很好!您将如何更新脚本以跟踪多个 var value 值?比如说,对于 5 个不同的单元格。
    猜你喜欢
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多