Ihr kompletter Ratgeber für die Datenextraktion aus dem Web mit Google Apps Script und Google Sheets

Table of contents
  1. Was ist Datenextraktion aus dem Web?
  2. Warum sollten Unternehmen Datenextraktion aus dem Web nutzen?
  3. Einführung in Google Apps Script und Google Sheets
  4. Schritt-für-Schritt-Anleitung zur Datenextraktion aus dem Web mit Google Apps Script und Google Sheets
    1. Die Idee
    2. Einrichten des Google Sheets
    3. Das richtige Element finden: So erhalten Sie den CSS-Selektor
    4. Der Code (Google Apps Script)
    5. Erläuterung des Codes
    6. Ausführen des Codes
    7. Wichtige Hinweise:
  5. Planen der täglichen Ausführung des Skripts
    1. Einen zeitgesteuerten Trigger erstellen
  6. Tipps und Einschränkungen
    1. UrlFetchApp-Kontingente
  7. Fazit
Attila

Business process automation expert

Erschließen Sie das Potenzial von Webdaten, ganz ohne fortgeschrittene Programmierkenntnisse! Dieses Tutorial zeigt Ihnen, wie Sie mühelos Informationen von Webseiten extrahieren und direkt in Google Sheets übertragen können, indem Sie Google Apps Script verwenden. Dies eröffnet Unternehmen eine Welt voller Möglichkeiten. Automatisieren Sie Marktforschung, Wettbewerbsanalysen und Datenerfassung, sparen Sie unzählige Stunden manueller Arbeit und gewinnen Sie wertvolle Erkenntnisse – und das alles ohne umfangreiche HTML-Kenntnisse.

Was ist Datenextraktion aus dem Web?

Datenextraktion aus dem Web ist vergleichbar mit dem automatischen Kopieren und Einfügen von Informationen von Webseiten. Stellen Sie sich einen digitalen Assistenten vor, der Webseiten besucht und automatisch bestimmte Informationen sammelt. Anstatt Texte oder Bilder manuell auszuwählen und zu kopieren, erledigt ein Programm diese Aufgabe für Sie und sammelt Daten wie Preise, Produktdetails oder Kontaktinformationen.

Diese extrahierten Daten können dann für verschiedene Zwecke verwendet werden, z. B. zum Vergleichen von Preisen verschiedener Online-Händler, zum Sammeln von Verkaufskontakten, zum Erstellen von Benachrichtigungen bei Inhaltsänderungen und vielem mehr. Im Wesentlichen automatisiert die Datenextraktion aus dem Web mühsame manuelle Arbeit und spart erheblich Zeit und Aufwand, indem große Mengen an Webdaten effizient extrahiert und organisiert werden.

Warum sollten Unternehmen Datenextraktion aus dem Web nutzen?

Im heutigen wettbewerbsintensiven Geschäftsumfeld sind Produktivität und eine optimierte Ressourcenzuweisung entscheidend für den Erfolg. Die Datenextraktion aus dem Web ist ein wertvolles Werkzeug, um diese Ziele zu erreichen, da sie die Produktivität durch die Automatisierung der zeitaufwendigen Datenerfassung und -analyse erheblich verbessert.

Durch die Automatisierung der Datenextraktion von Webseiten sparen Unternehmen im Vergleich zu manuellen Methoden erheblich Zeit und Aufwand. Diese gesteigerte Effizienz ermöglicht es Teams, sich auf strategische Initiativen anstatt auf sich wiederholende Aufgaben zu konzentrieren.

Darüber hinaus sind die durch Datenextraktion aus dem Web gesammelten Daten nicht nur ein Selbstzweck; sie dienen als wichtiger Input für weitere Automatisierungsprozesse. Zum Beispiel können extrahierte Daten dynamische, wettbewerbsbasierte Preisstrategien im E-Commerce unterstützen oder automatisch wertvolle Investitionsmöglichkeiten identifizieren, indem Immobilienangebote von mehreren Portalen zusammengeführt werden.

Diese nahtlose Integration mit anderen Automatisierungs-Workflows verstärkt die Wirkung der Datenextraktion aus dem Web und macht sie zu einem unverzichtbaren Aktivposten für jedes zukunftsorientierte Unternehmen.

Einführung in Google Apps Script und Google Sheets

Google Apps Script ist eine cloudbasierte Skriptsprache, die auf JavaScript basiert und es Ihnen ermöglicht, Aufgaben zu automatisieren und leistungsstarke Integrationen innerhalb von Google Workspace (ehemals G Suite) zu erstellen. Sein einzigartiger Vorteil liegt in seiner Fähigkeit, verschiedene Google-Dienste nahtlos miteinander zu verbinden, darunter Gmail, Docs, Drive, Kalender und vor allem Sheets, was es außergewöhnlich gut für die Erstellung umfassender Automatisierungen geeignet macht. Diese Vernetzung ermöglicht es Ihnen, Workflows zu erstellen, die sich über mehrere Anwendungen erstrecken, Prozesse zu optimieren und die Produktivität zu steigern.

Speziell für die Datenextraktion aus dem Web ermöglicht der UrlFetchApp-Dienst von Apps Script das direkte Abrufen von Inhalten von Webseiten und somit die automatisierte Datenextraktion und -integration mit den übrigen Google Workspace-Anwendungen. Durch das Senden von HTTP-Anfragen an Webseiten können Sie HTML-, XML- oder JSON-Daten abrufen. Diese extrahierten Daten können dann mithilfe von JavaScript innerhalb des Skripts analysiert und strukturiert werden.

Die wahre Stärke dieses Ansatzes zeigt sich in Kombination mit Google Sheets: Extrahierte Daten können direkt in Tabellenkalkulationen geschrieben werden, was eine bequeme und vertraute Umgebung für Datenspeicherung, -organisation, -analyse, -visualisierung und weitere Automatisierung bietet.

Schritt-für-Schritt-Anleitung zur Datenextraktion aus dem Web mit Google Apps Script und Google Sheets

Die Idee

Wir erstellen ein System, das Folgendes tut:

  1. Liest eine Liste von Webseiten-Adressen (URLs) aus einem Google Sheet.
  2. Besucht jede Webseite und ruft deren HTML-Inhalt ab.
  3. Findet die vordefinierte Information (in unserem Fall den Produktpreis) in diesem HTML.
  4. Schreibt die extrahierten Preise zurück in das Google Sheet.

Einrichten des Google Sheets

Zuerst benötigen Sie ein Google Sheet. Ihr Google Sheet sollte mindestens drei Spalten haben:

  • Spalte A (Spalte 1): Diese Spalte enthält die Webseiten-Adressen (URLs) der Produkte, die Sie verfolgen möchten.
  • Spalte B (Spalte 2): Diese Spalte enthält den CSS-Selektor, der verwendet wird, um das spezifische Element (wie den Preis) von der Webseite zu identifizieren und zu extrahieren.
  • Spalte C (Spalte 3): In dieser Spalte werden die von den Webseiten extrahierten Preise gespeichert.

Hier finden Sie eine Vorlage für die Tabellenkalkulation.

Das richtige Element finden: So erhalten Sie den CSS-Selektor

Der nächste entscheidende Schritt für Ihr Datenextraktionswerkzeug besteht darin, ihm genau mitzuteilen, welche Information von der Webseite abgerufen werden soll. Hier kommt der CSS-Selektor ins Spiel.

Stellen Sie sich einen CSS-Selektor als eine Adresse für ein bestimmtes Element auf einer Webseite vor – wie den Preis, einen Produkttitel oder die Anzahl der Bewertungen. So finden Sie diese Adresse ganz einfach mit dem Chrome-Browser:

  1. Webseite öffnen: Gehen Sie zur spezifischen Produktseite (oder einer beliebigen Seite mit dem Element, das Sie extrahieren möchten).
  2. Entwicklertools öffnen: Klicken Sie mit der rechten Maustaste irgendwo auf die Seite und wählen Sie „Untersuchen“ (oder „Inspect Element“). Dadurch wird das Entwicklertools-Panel geöffnet, normalerweise am unteren oder seitlichen Rand Ihres Browserfensters. Stellen Sie sicher, dass Sie sich im Tab „Elemente“ befinden.
  3. Elementauswahl verwenden: In der oberen linken Ecke des Entwicklertools-Panels sehen Sie ein kleines Symbol, das wie ein Pfeil in einem Kasten aussieht (oder manchmal nur ein Mauszeiger-Symbol). Klicken Sie auf dieses Symbol. Dadurch wird der Modus „Element auswählen“ aktiviert.
  4. Darüberfahren und Klicken: Bewegen Sie nun Ihren Mauszeiger über die Elemente auf der Webseite. Wenn Sie darüberfahren, wird das Element unter Ihrem Mauszeiger hervorgehoben. Klicken Sie auf das spezifische Element, das Sie extrahieren möchten (z. B. die Preisanzeige).
  5. Im HTML lokalisieren: Durch Klicken auf die Elementauswahl springt die Ansicht zu dem Code dieses Elements im Tab „Elemente“ der Entwicklertools und hebt ihn hervor.
  6. Selektor kopieren: Klicken Sie mit der rechten Maustaste auf die hervorgehobene Codezeile im Entwicklertools-Panel. Fahren Sie im erscheinenden Kontextmenü über Kopieren und klicken Sie dann auf Selektor kopieren.
Screenshot

Das war’s! Der CSS-Selektor für dieses spezifische Element wurde nun in Ihre Zwischenablage kopiert. Diesen Wert fügen Sie dann in Spalte B Ihres Google Sheets für die entsprechende Produkt-URL ein und teilen Ihrem Extraktionsskript damit genau mit, wonach es auf dieser Seite suchen soll.

Der Code (Google Apps Script)

Schauen wir uns nun den Code an, der die Magie vollbringt. Öffnen Sie den Skripteditor in Ihrem Google Sheet, indem Sie zu „Erweiterungen“ > „Apps Script“ gehen. (Hinweis: Der Menüpfad kann je nach Google Sheets-Version variieren, oft auch „Tools“ > „Skripteditor“). Kopieren Sie den untenstehenden Code und fügen Sie ihn in den Skripteditor ein.

/**
 * Fetches product prices from URLs in a Google Sheet and updates the sheet with the prices.
 */

// Konfiguration (Aktualisieren Sie diese mit Ihren tatsächlichen Werten)
const SHEET_ID = `YOUR_SHEET_ID`; // Ersetzen Sie dies durch Ihre tatsächliche Sheet-ID
const SHEET_NAME = `YOUR_SHEET_NAME`; // Ersetzen Sie dies durch Ihren tatsächlichen Sheet-Namen
const URLS_COLUMN_ID = 1; // Spalte, die URLs enthält (A = 1)
const CSS_SELECTOR_COLUMN = 2; // Spalte, die CSS-Selektoren enthält (B = 2)
const PRICE_COLUMN = 3; // Spalte zum Schreiben der Preise (C = 3)
const REQUEST_DELAY = 1000; // Verzögerung zwischen Anfragen in Millisekunden (1 Sekunde)


/**
 * Hauptfunktion zum Ausführen des Skripts.
 */
function main() {
  const urlData = getUrlsFromSheet();
  if (urlData.length === 0) {
    Logger.log("No URLs to process.");
    return;
  }

  const prices = [];
  for (let i = 0; i < urlData.length; i++) {
    const url = urlData[i].url;
    const selector = urlData[i].selector;
    const html = fetchHtml(url);
    const price = extractPrice(html, selector);
    prices.push(price);
    Utilities.sleep(REQUEST_DELAY); // Verzögerung zwischen Anfragen
    Logger.log(`Processed URL ${i+1}/${urlData.length}: ${url}, Price: ${price}`);
  }

  updateSheet(prices);
}


/**
 * Öffnet die Tabellenkalkulation und ruft die URLs und Selektoren ab.
 * @return {Array<{url: string, selector: string}>} Ein Array von Objekten, das URLs und Selektoren enthält.
 */
function getUrlsFromSheet() {
  const ss = SpreadsheetApp.openById(SHEET_ID);
  const sheet = ss.getSheetByName(SHEET_NAME);
  const lastRow = sheet.getLastRow();
  if (lastRow < 2) return []; // Leeres Blatt behandeln

  const urls = sheet.getRange(2, URLS_COLUMN_ID, lastRow - 1)
    .getValues()
    .flat(); // Werte als 1D-Array abrufen.

  const selectors = sheet.getRange(2, CSS_SELECTOR_COLUMN, lastRow - 1)
    .getValues()
    .flat(); // Werte als 1D-Array abrufen.

  const urlData = [];
  for (let i = 0; i < urls.length; i++) {
    urlData.push({
      url: urls[i],
      selector: selectors[i]
    });
  }
  return urlData;
}


/**
 * Ruft den HTML-Inhalt einer URL ab.
 * @param {string} url Die abzurufende URL.
 * @return {string|null} Der HTML-Inhalt oder null, wenn ein Fehler auftritt.
 */
function fetchHtml(url) {
  try {
    const options = {
      method: 'get',
      muteHttpExceptions: true,
      headers: { // Einige gängige Header hinzugefügt
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
        'Accept-Language': 'en-US,en;q=0.9',
        'Cache-Control': 'no-cache'
      }
    };
    const response = UrlFetchApp.fetch(url, options);
    if (response.getResponseCode() === 200) {
      return response.getContentText();
    } else {
      Logger.log(`Error fetching ${url}: ${response.getResponseCode()} - ${response.getContentText()}`);
      return null;
    }
  } catch (error) {
    Logger.log(`Error fetching ${url}: ${error}`);
    return null;
  }
}


/**
 * Extrahiert den Preis aus dem HTML mit Cheerio.
 * @param {string} html Der HTML-Inhalt.
 * @param {string} selector Der zu verwendende CSS-Selektor.
 * @return {number|null} Der extrahierte Preis als Zahl oder null, wenn nicht gefunden.
 */
function extractPrice(html, selector) { // Selektor-Parameter hinzugefügt
  if (!html || !selector) return null; // Prüfung für Selektor hinzugefügt

  try {
    const $ = Cheerio.load(html);
    let priceText = $(selector).text(); // Bereitgestellten Selektor verwenden
    if (!priceText) {
      Logger.log("Price element not found using selector: " + selector);
      return null;
    }
    priceText = priceText.replace(/,/g,'.');
    let price = parseFloat(priceText.replace(/[^0-9.]/g, ''));
    if (isNaN(price)) {
      Logger.log("Could not parse price to a number: " + priceText);
      return null;
    }
    return price;
  } catch (error) {
    Logger.log("Error extracting price: " + error);
    return null;
  }
}


/**
 * Aktualisiert das Google Sheet mit den extrahierten Preisen.
 * @param {Array<number|null>} prices Ein Array von Preisen, die in das Sheet geschrieben werden sollen.
 */
function updateSheet(prices) {
  if (prices.length === 0) return;

  const ss = SpreadsheetApp.openById(SHEET_ID);
  const sheet = ss.getSheetByName(SHEET_NAME);
  const lastRow = sheet.getLastRow();
  const urlsCount = sheet.getRange(2, URLS_COLUMN_ID, lastRow - 1).getValues().flat().length;

  if (prices.length !== urlsCount) {
    Logger.log(`Number of prices (${prices.length}) does not match the number of URLs (${urlsCount}).`);
    return;
  }
  
  sheet.getRange(2, PRICE_COLUMN, prices.length, 1).setValues(prices.map(price => [price]));
}

Bevor Sie diesen Code verwenden, vergessen Sie bitte nicht, die Cheerio-Bibliothek einzubinden. Diese Drittanbieter-Bibliothek hilft uns, HTML einfacher zu verarbeiten, und muss manuell zu unserem Projekt hinzugefügt werden. So geht’s:

  1. Klicken Sie im Apps Script-Editor auf das Menü „Dienste“ (oder das Plus-Symbol neben „Dienste“) und wählen Sie „Bibliothek hinzufügen“. (Hinweis: Ältere Versionen hatten ein Menü „Ressourcen“ > „Bibliotheken…“)
  2. Es erscheint ein Dialogfeld. Geben Sie die folgende Skript-ID in das Eingabefeld ein: 1ReeQ6WO8kKNxoaA_O0XEQ589cIrRvEBA9qcWpNqdOP17i47u6N9M5Xh0
  3. Nachdem Sie die Skript-ID eingegeben haben, klicken Sie auf die Schaltfläche „Suchen“.
  4. Wenn die Skript-ID gültig ist, werden die Informationen der Bibliothek (Name und Versionen) angezeigt. Wählen Sie die spezifische Version der Bibliothek, die Sie verwenden möchten, aus dem Dropdown-Menü aus. Es wird im Allgemeinen empfohlen, aus Stabilitätsgründen eine bestimmte Version anstelle von „Neueste“ zu verwenden.
  5. Sobald Sie die Version ausgewählt haben, klicken Sie auf die Schaltfläche „Hinzufügen“.

Die Bibliothek sollte nun im Dialogfeld „Bibliotheken“ (oder unter „Dienste“) erscheinen.

Erläuterung des Codes

Unser Google Apps Script zur Verfolgung von Produktpreisen besteht aus mehreren Schlüsselfunktionen, die zusammenarbeiten. Lassen Sie uns aufschlüsseln, was jede einzelne tut:

1. main()

  • Zweck: Dies ist der Dirigent unseres Orchesters! Die main-Funktion ist der Haupteinstiegspunkt, der den gesamten Prozess des Abrufens und Aktualisierens von Preisen orchestriert. Sie ruft andere Funktionen in der richtigen Reihenfolge auf, um die Aufgabe zu erledigen.
  • Struktur:
    1. Sie beginnt mit dem Aufruf von getUrlsFromSheet(), um die Liste der URLs und der zugehörigen CSS-Selektoren aus Ihrer Tabellenkalkulation abzurufen.
    2. Anschließend durchläuft sie jedes URL/Selektor-Paar.
    3. Innerhalb der Schleife, für jedes Element:
      • Sie ruft fetchHtml() auf, um den Inhalt der Webseite herunterzuladen.
      • Sie übergibt das heruntergeladene HTML und den Selektor an extractPrice(), um den Preis zu finden.
      • Sie fügt den gefundenen Preis (oder null, falls nicht gefunden) zu einer Liste hinzu.
      • Sie pausiert kurz (Utilities.sleep()), um eine Überlastung der Webseiten zu vermeiden.
    4. Schließlich ruft sie updateSheet() auf, um alle gesammelten Preise zurück in die Tabellenkalkulation zu schreiben.
  • Analogie: Stellen Sie sich main() als einen Projektmanager vor. Er erledigt die spezialisierten Aufgaben nicht selbst, kennt aber das Gesamtziel und leitet die Spezialisten (getUrlsFromSheet, fetchHtml, extractPrice, updateSheet) in der richtigen Reihenfolge an, um sicherzustellen, dass das Projekt (Preisverfolgung) Schritt für Schritt abgeschlossen wird.

2. getUrlsFromSheet()

  • Zweck: Diese Funktion fungiert als Datenabrufer. Ihre Aufgabe ist es, Ihr angegebenes Google Sheet zu öffnen und die Liste der Produktseiten-URLs sowie die CSS-Selektoren auszulesen, die benötigt werden, um die Preise auf diesen Seiten zu finden.
  • Struktur:
    1. Öffnet die Google-Tabelle anhand ihrer ID (SHEET_ID).
    2. Wählt das spezifische Tabellenblatt innerhalb dieser Tabelle anhand seines Namens (SHEET_NAME) aus.
    3. Ermittelt, wie viele Zeilen Daten enthalten.
    4. Liest die Werte aus der URL-Spalte (URLS_COLUMN_ID).
    5. Liest die Werte aus der CSS-Selektor-Spalte (CSS_SELECTOR_COLUMN).
    6. Kombiniert diese zu einer Liste, in der jedes Element sowohl die URL als auch den zugehörigen Selektor enthält.
    7. Gibt diese Liste von URL/Selektor-Paaren zurück.
  • Analogie: Diese Funktion ist wie ein Bibliothekar. Sie geben ihm den Ort (Sheet-ID und Name) und die Art der Informationen, die Sie benötigen (URLs und Selektoren aus bestimmten Spalten), und er geht zu den Regalen (dem Sheet), holt die angeforderten Listen heraus und übergibt sie Ihnen ordentlich sortiert.

3. fetchHtml()

  • Zweck: Die Aufgabe dieser Funktion ist es, eine bestimmte Webadresse (URL) zu besuchen und den rohen HTML-Quellcode dieser Seite herunterzuladen. Dieser Code wird vom Browser verwendet, um die Webseite anzuzeigen, und er enthält die Preisinformationen, die wir benötigen.
  • Struktur:
    1. Nimmt eine einzelne url als Eingabe entgegen.
    2. Verwendet den UrlFetchApp.fetch()-Dienst von Google Apps Script, um eine Anfrage an diese URL zu senden.
    3. Sie enthält spezifische options (wie User-Agent-Header), damit die Anfrage eher wie von einem Standard-Webbrowser aussieht, was helfen kann, eine Blockierung durch einige Webseiten zu verhindern.
    4. Sie prüft, ob die Webseite erfolgreich geantwortet hat (HTTP-Statuscode 200).
    5. Bei Erfolg gibt sie den heruntergeladenen HTML-Code als Text zurück.
    6. Wenn ein Fehler auftritt (z. B. Seite nicht gefunden oder Zugriff verweigert), protokolliert sie den Fehler und gibt null zurück.
  • Analogie: Stellen Sie sich fetchHtml() als einen Web-Scout vor. Sie geben ihm eine Adresse (URL), und er geht zu diesem Ort im Internet, erstellt eine Kopie des zugrundeliegenden Bauplans der Seite (des HTML) und bringt Ihnen diesen Bauplan zurück. Er versucht sogar, wie ein normaler Besucher auszusehen, um keinen Verdacht zu erregen.

4. extractPrice()

  • Zweck: Dies ist der spezialisierte Extraktor. Mit dem rohen HTML-Code einer Seite und einem spezifischen CSS-Selektor (der wie eine Kartenkoordinate fungiert) findet diese Funktion den Preistext, bereinigt ihn und wandelt ihn in einen numerischen Wert um.
  • Struktur:
    1. Nimmt den html-Inhalt und den selector als Eingabe entgegen.
    2. Verwendet die Cheerio-Bibliothek (die zu Ihrem Apps Script-Projekt hinzugefügt werden muss), um das HTML zu parsen, was die Suche erleichtert.
    3. Verwendet den bereitgestellten selector, um das genaue HTML-Element zu finden, das den Preis enthält.
    4. Extrahiert den Textinhalt aus diesem Element.
    5. Bereinigt den Text: entfernt Währungssymbole, Tausendertrennzeichen (wie Kommas) und alle anderen nicht-numerischen Zeichen außer dem Dezimalpunkt. Es standardisiert auch Dezimaltrennzeichen zu Punkten.
    6. Wandelt den bereinigten Text in eine Gleitkommazahl um.
    7. Wenn ein Schritt fehlschlägt (z. B. Selektor nicht gefunden, Text kann nicht in eine Zahl umgewandelt werden), protokolliert es das Problem und gibt null zurück. Andernfalls gibt es den numerischen Preis zurück.
  • Analogie: Stellen Sie sich extractPrice() als einen Datendetektiv vor. Er erhält ein großes Dokument (HTML) und einen spezifischen Hinweis (den CSS-Selektor). Er verwendet den Hinweis, um das genaue Datenelement (den Preistext) zu finden, entfernt sorgfältig alle störenden Zeichen (Währungssymbole, Kommas) und meldet den endgültigen gefundenen numerischen Wert.

5. updateSheet()

  • Zweck: Diese Funktion ist der letzte Schritt und dafür verantwortlich, die Liste der extrahierten Preise entgegenzunehmen und sie zurück in die dafür vorgesehene Spalte in Ihrem Google Sheet zu schreiben.
  • Struktur:
    1. Nimmt das prices-Array (gesammelt von der main-Funktion) als Eingabe entgegen.
    2. Öffnet die Ziel-Google-Tabelle und das Tabellenblatt (ähnlich wie getUrlsFromSheet).
    3. Führt eine Sicherheitsprüfung durch: Es überprüft, ob die Anzahl der gesammelten Preise mit der Anzahl der ursprünglich aus dem Sheet gelesenen URLs übereinstimmt, um zu vermeiden, dass Daten in die falschen Zeilen geschrieben werden, falls einige Abrufe fehlgeschlagen sind.
    4. Wählt den korrekten Bereich in der Ausgabespalte (PRICE_COLUMN) aus, beginnend ab der zweiten Zeile und über die erforderliche Anzahl von Zeilen.
    5. Formatiert die einfache Liste der Preise in ein 2D-Array-Format, das Google Sheets zum Schreiben benötigt ([[price1], [price2], ...]).
    6. Schreibt die formatierten Preise mit setValues() in den ausgewählten Bereich im Sheet.
  • Analogie: Diese Funktion ist der Buchhalter oder Schreiber. Sie nimmt den Abschlussbericht (die Preisliste), der vom Team erstellt wurde, und trägt jeden Wert sorgfältig in die richtige Zelle des Hauptbuchs (des Google Sheets) ein, wobei Genauigkeit und korrekte Platzierung sichergestellt werden.

Ausführen des Codes

Nachdem Sie den Code in den Skripteditor eingefügt haben:

  1. Speichern Sie das Skript.
  2. Führen Sie die main()-Funktion aus. Sie müssen das Skript autorisieren, um auf Ihr Google Sheet zugreifen zu können.

Wichtige Hinweise:

  • Die Funktion extractPrice(html, selector) ist der webseitenspezifischste Teil. Die Art und Weise, wie Preise im HTML angezeigt werden, variiert von Webseite zu Webseite. Daher müssen Sie möglicherweise den Code innerhalb dieser Funktion anpassen, um der Struktur der von Ihnen verfolgten Webseiten zu entsprechen. Sie müssen wahrscheinlich den HTML-Quellcode der Webseite untersuchen, um einen geeigneten CSS-Selektor zu finden.
  • Der Code enthält eine Verzögerung von 1 Sekunde zwischen den Anfragen. Dies ist wichtig, um höflich gegenüber den Webseiten zu sein, von denen Sie Daten extrahieren, und um eine Blockierung zu vermeiden.

Dieses automatisierte System spart Ihnen Zeit und Mühe, indem es Produktpreise automatisch für Sie verfolgt. Wenn Sie die Grundlagen seiner Funktionsweise verstehen, können Sie es sogar weiter an Ihre spezifischen Bedürfnisse anpassen.

Planen der täglichen Ausführung des Skripts

Der letzte Schritt besteht darin, Ihr Skript so zu planen, dass es jeden Tag automatisch zur gewünschten Zeit ausgeführt wird.

Einen zeitgesteuerten Trigger erstellen

  • Gehen Sie zu „Auslöser“ (Uhren-Symbol in der linken Seitenleiste des Apps Script-Editors). (Hinweis: Ältere Versionen hatten „Bearbeiten“ -> „Trigger des aktuellen Projekts“).
  • Klicken Sie auf „Trigger hinzufügen“.
  • Wählen Sie die Funktion main() aus.
  • Wählen Sie „Zeitgesteuert“ als Ereignisquelle.
  • Wählen Sie „Tageszeit-Timer“ und geben Sie die gewünschte Zeit an (z. B. 00:00 Uhr für Mitternacht).
  • Speichern Sie den Trigger.

Tipps und Einschränkungen

Obwohl UrlFetchApp von Google Apps Script für viele Webseiten effektiv ist, eignet es sich möglicherweise nicht für stark geschützte Seiten, die Anti-Datenextraktionsmaßnahmen wie CAPTCHAs und IP-Blockaden einsetzen. Der Versuch, diese Schutzmaßnahmen allein mit Apps Script zu umgehen, ist oft unzuverlässig.

Die Datenextraktion von solchen Portalen oder die Anwendung von „Black Hat“-Praktiken erfordert dedizierte Drittanbieterlösungen, die Techniken wie rotierende Proxys und CAPTCHA-Löser verwenden. Beispiele für solche Dienste sind Apify, Bright Data, ParseHub und Scraper API.

Wichtig ist, dass diese Dienste oft in Automatisierungsprozesse von Google Workspace integriert werden können. Das bedeutet, Sie können immer noch einen vollständigen, automatisierten Workflow innerhalb Ihrer Workspace-Infrastruktur aufbauen, auch wenn eine Drittanbieterlösung für die Datenextraktion erforderlich ist. Von diesen Diensten extrahierte Daten können über deren APIs oder Webhooks nahtlos in Google Sheets, Docs oder andere Workspace-Anwendungen eingespeist werden. Es wird dringend empfohlen, die Nutzungsbedingungen von Webseiten und die `robots.txt`-Datei zu respektieren und Daten verantwortungsbewusst und ethisch zu extrahieren.

UrlFetchApp-Kontingente

Google Workspace erlegt Kontingente und Beschränkungen für `UrlFetchApp` auf, um Missbrauch zu verhindern, die Dienststabilität aufrechtzuerhalten und eine faire Nutzung für alle Benutzer zu gewährleisten. Diese Einschränkungen sind beim Entwerfen von Skripten zur Datenextraktion aus dem Web unbedingt zu verstehen:

  • Ausführungszeit: Es gibt ein tägliches Limit für die Gesamtzeit, die Ihr Apps Script-Projekt laufen kann. Zum Zeitpunkt der Erstellung dieses Textes liegt dieses Limit für die meisten Workspace-Konten typischerweise bei etwa 6 Minuten pro Ausführung. Das bedeutet, wenn Ihr Skript aufgrund zahlreicher UrlFetchApp-Aufrufe oder komplexer Verarbeitung über einen längeren Zeitraum läuft, könnte es dieses Limit erreichen und die Ausführung beenden. Sie können das Skript jedoch oft neu starten, nachdem es aufgrund des Erreichens des Ausführungszeitlimits gestoppt wurde, was Ihnen ermöglicht, größere Datensätze zu verarbeiten oder komplexere Aufgaben in Etappen durchzuführen.
  • Anzahl der Aufrufe: Es gibt Beschränkungen, wie viele UrlFetchApp-Anfragen Sie innerhalb bestimmter Zeiträume stellen können. Diese Limits sollen verhindern, dass Zielwebseiten mit Anfragen überlastet werden. Zum Zeitpunkt der Erstellung dieses Textes haben kostenlose Google-Konten typischerweise ein tägliches Limit von etwa 20.000 `UrlFetchApp`-Aufrufen, während Google Workspace-Konten im Allgemeinen ein viel höheres Limit von etwa 100.000 Aufrufen pro Tag haben.
  • Sequenzieller Ansatz vs. `fetchAll()`: Obwohl Apps Script in einer Single-Thread-Umgebung arbeitet und kein echtes gleichzeitiges Abrufen bietet, ermöglicht die Verwendung von UrlFetchApp.fetchAll() einen optimierten Abruf mehrerer URLs. Diese Methode reduziert den Overhead im Vergleich zum sequenziellen Abrufen erheblich, indem sie die Netzwerkkommunikation effizienter handhabt, auch wenn die Anfragen nicht parallel ausgeführt werden.

Fazit

Zusammenfassend lässt sich sagen, dass die Datenextraktion aus dem Web mit Google Apps Script und Google Sheets Unternehmen eine leistungsstarke, zugängliche und vor allem kostenlose Möglichkeit bietet, die Datenerfassung zu automatisieren und wertvolle Erkenntnisse zu gewinnen. Google Apps Script kann sowohl mit kostenlosen Google-Konten als auch mit Google Workspace-Abonnements verwendet werden, was es zu einer kostengünstigen Lösung für Unternehmen jeder Größe macht.

Wenn Sie Google Workspace verwenden, bietet die Nutzung von Apps Script für Ihre Anforderungen an die Datenextraktion aus dem Web darüber hinaus eine unübertroffene Flexibilität und Integration in Ihre bestehenden Geschäftsabläufe. Im Gegensatz zu starren Drittanbieterlösungen, die oft komplexe Integrationen und Datenübertragungsprozesse erfordern, verbindet sich Apps Script nahtlos mit anderen Workspace-Anwendungen.

Wir ermutigen Sie, die Möglichkeiten der Datenextraktion aus dem Web mit Google Apps Script und Sheets für Ihre eigenen Geschäftsanforderungen zu erkunden und das Potenzial der automatisierten Datenerfassung für verbesserte Effizienz und strategische Vorteile zu erschließen. Die Anzahl der Szenarien, in denen diese leistungsstarke Kombination angewendet werden kann, ist praktisch endlos; von der Automatisierung der Marktforschung und Wettbewerbsanalyse bis hin zur Optimierung der Lead-Generierung und Content-Aggregation – nur Ihre Vorstellungskraft begrenzt die potenziellen Anwendungsfälle.

Attila

Business process automation expert

Leave a comment

Deine E-Mail-Adresse wird nicht veröffentlicht.

bestflow.

1118 Budapest, Ménesi út 24. Hungary

© 2024 bestflow. All rights reserved.