2016-05-27 57 views
3

我在Google Spreadsheets上使用ImportXML来抓取YouTube搜索结果并捕获我正在追踪的视频的排名。ImportXML使用谷歌电子表格和保存结果过长时间

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

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

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

任何想法?

回答

4

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]]); 
} 

在每次运行中,脚本附加在Sheet 2中的底部的两个细胞:一个与所述时间戳(应该格式化为这样),一个具有对应于该时间标记的值。

,一种用于存储范围内的值,如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 
} 
+0

伟大的作品!你将如何更新脚本来跟踪多个'var value'值?说,5个不同的细胞。 – AlbertoA

+0

添加示例 –