2016-05-27 5 views
3

Ich verwende ImportXML in Google Spreadsheets, um die YouTube-Suchergebnisse zu scrapen und die Rangfolgen eines Videos, das ich tracke, zu erfassen.Importieren Sie XML mit Google Spreadsheets und speichern Sie die Ergebnisse im Laufe der Zeit

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

Das Scraping funktioniert gut (und ich bekomme alle Ergebnisse für die erste Seite). Ich suche dann die Position der YouTube-Ergebnisse und speichere das in einer Zelle.

Allerdings ist das Problem, das ich habe, wenn ich versuche, das Ranking over-time zu verfolgen. Nicht sicher, wie das geht, aber ich suche nach einer Möglichkeit, die =ImportXML-Funktion jeden Tag auszuführen (gibt es einen Aktualisierungsbefehl?) Und speichern das Ergebnis aus dieser Zelle in einer neuen Zeile jedes Mal, wenn die Funktion ausgeführt wird.

Irgendwelche Ideen?

Antwort

4

importXML Die Ausgabe wird automatisch aktualisiert (etwa alle zwei Stunden), aber Sie benötigen immer noch ein Skript, um die vergangenen Werte irgendwo zu speichern: normalerweise auf einem anderen Blatt. Geben Sie Folgendes ein, indem Sie Extras> Skript-Editor verwenden und die Blattnamen und die Zelle mit dem gewünschten Wert anpassen. Legen Sie fest, dass es täglich oder wöchentlich mithilfe der Ressourcen> Aktuelle Projektauslöser ausgeführt werden soll.

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

Bei jedem Durchlauf fügt das Skript zwei Zellen am Boden des Tabelle2: ein mit dem Zeitstempel, eine mit dem Wert zu dieser Zeitmarke entspricht (sollte als solche formatiert werden).

Eine Version eine Reihe von Werten wie B3 zum Speichern: 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

funktioniert super! Wie würden Sie das Skript aktualisieren, um mehrere 'var value' Werte zu verfolgen? Sprich, für 5 verschiedene Zellen. – AlbertoA

+0

Beispiel hinzugefügt .. –

Verwandte Themen