jsonscraper
Märkte

Qualität von TikTok-Leads anhand öffentlicher Videos bewerten: eine Python-Pipeline Schritt für Schritt

Erstellen Sie eine Stichprobe anhand von Suchbegriffen, erkennen Sie mögliche Nachfragesignale und übergeben Sie überprüfbare Daten an Analysten oder einen KI-Klassifikator.

Redaktionsrichtlinie Fehler melden

Das Vertriebsteam erhält über verschiedene Kanäle immer wieder dieselbe Frage: Welche Aufgaben versuchen potenzielle Kunden bereits zu lösen? Die manuelle Suche auf TikTok liefert eine Fülle von Videos, doch es ist schwierig, sie eine Woche später zu wiederholen, die Ergebnisse zu vergleichen und zu erklären, warum ein bestimmtes Video im Bericht gelandet ist. Für eine kleine Untersuchung lässt sich die öffentliche Suche anhand einiger präziser Anfragen in einen reproduzierbaren Datenstrom verwandeln: die Rohantwort speichern, Felder zu Video und Autor extrahieren, Duplikate entfernen und anschließend Merkmale für eine Kauf- oder Produktauswahlabsicht separat bewerten.

Artikel: Qualität von TikTok-Leads anhand öffentlicher Videos bewerten: eine Python-Pipeline Schritt für Schritt
Zusammenfassung: Ein praktischer Ansatz für Marketingfachleute und Entwickler: öffentliche TikTok-Videos anhand von Suchanfragen der Zielgruppe über die TikTok Scraper API finden, Rohantworten speichern, Videos deduplizieren und nach klaren Regeln einstufen. Das Beispiel zeigt ein Python-Skript, das zwei Antwortstrukturen verarbeitet und den API-Schlüssel sicher übergibt.
Bildrolle: Titelbild – die zentrale Idee
Abschnitt: 
Visuelles Motiv: Nahaufnahme einer redaktionellen Illustration
© jsonscraper · KI-generierte Illustration

Im Folgenden wird ein praktischer Python-Ansatz mit der TikTok Scraper API von jsonscraper vorgestellt. Er eignet sich zum Beispiel für einen Anbieter von Videoschnittsoftware, der herausfinden möchte, wie Creator Schwierigkeiten mit Untertiteln, Vorlagen und Export beschreiben. Das Skript sammelt die zurückgegebenen Suchergebnisse; anschließend prüft ein Analyst die Klassifizierung und entscheidet, welche Formulierungen sich für die Zielgruppenforschung eignen. Damit lässt sich die Beobachtung öffentlicher Inhalte organisieren. Es handelt sich jedoch nicht um eine automatische Zählung aller Nutzer mit Kaufabsicht.

Das Problem: Es gibt Suchanfragen der Zielgruppe, aber die Untersuchung lässt sich nur schwer wiederholen

Bei manuellen Untersuchungen geht leicht der Kontext verloren. Ein Mitarbeiter sucht nach „Untertitel hinzufügen“, ein anderer nach „automatische Untertitel für Reels“, und ein dritter speichert nur Videos, die ihm gefallen. In der Ergebnistabelle vermischen sich unterschiedliche Suchanfragen, Daten, Kennzahlen und Auswahlkriterien. Wenn eine Führungskraft um eine Wiederholung der Analyse oder einen Vergleich zweier Wochen bittet, muss nicht nur das Ergebnis, sondern auch der Suchverlauf rekonstruiert werden.

Hilfreicher ist es, die Beobachtungseinheit vorab festzulegen: ein gefundenes Video mit Beschreibungstext, ID, Link, Autor und verfügbaren öffentlichen Kennzahlen. Für jedes Video werden außerdem die ursprüngliche Suchanfrage und der Erfassungszeitpunkt gespeichert. So lassen sich Fragen getrennt beantworten: Welche Formulierungen kommen vor? Welche Probleme werden erwähnt? Welche Videos erhielten mehr öffentliche Reaktionen? Und was hat sich zwischen den gespeicherten Momentaufnahmen verändert?

Nehmen wir als Beispiel ein Unternehmen, das ein Werkzeug zum Erstellen von Untertiteln und Kurzvideos entwickelt. Es möchte öffentliche Videos finden, in denen Creator direkt über manuelle Transkription, Fehler bei der Spracherkennung, das Timing von Texteinblendungen oder die Aufbereitung von Inhalten für mehrere Plattformen sprechen. Einem Autor sollte man nicht allein aufgrund eines Videos die Eigenschaften „Lead“ oder „Käufer“ zuschreiben. Forschende können Inhalte anhand beobachtbarer Merkmale einstufen und ihre Schlussfolgerungen anschließend manuell überprüfen.

Lösungsansatz: Suche, Erfassung, Bereinigung, Bewertung

Die Pipeline besteht aus vier Schritten. Zunächst erstellt das Team ein kleines Verzeichnis von Suchanfragen, die jeweils einer konkreten Aufgabe der Zielgruppe entsprechen. Anschließend fragt das Skript die Videosuche ab und speichert die vollständige JSON-Antwort. Im dritten Schritt werden unterschiedliche Antwortstrukturen in ein einheitliches Datensatzformat pro Video normalisiert und anhand der ID dedupliziert. Schließlich vergeben Regeln oder ein separater KI-Klassifikator eine Priorität für die manuelle Prüfung und speichern die Begründung der Bewertung.

Die Trennung dieser Schritte ist wichtig für die Reproduzierbarkeit. Mit der Rohantwort lassen sich Änderungen an Feldern oder Fehler bei der Normalisierung untersuchen. Die normalisierte Tabelle eignet sich zum Filtern und Visualisieren. In einer separaten Bewertungstabelle können Regeln geändert werden, ohne die API erneut abzufragen – sofern die gespeicherten Daten für eine solche erneute Verarbeitung geeignet sind und den Aufbewahrungsfristen des Teams entsprechen.

Als Ausgangspunkt eignen sich etwa „Fehler bei automatischen Untertiteln“, „Wie füge ich schnell Untertitel hinzu?“ und „Kurzvideos für Unternehmen schneiden“. Das sind lediglich Beispiele für ein Suchverzeichnis; die Formulierungen sollten an die Sprache der Zielgruppe und das Produkt angepasst werden. Suchanfragen müssen zusammen mit den Ergebnissen gespeichert werden, denn unterschiedliche Formulierungen ergeben unterschiedliche Stichproben.

Was die TikTok Scraper API bereitstellt

In der veröffentlichten jsonscraper-Dokumentation ist für die Videosuche die GET-Route /searchVideo unter der Basisadresse https://tiktok.evelode.com angegeben. Der erforderliche Parameter lautet keyword. Zu den dokumentierten optionalen Parametern gehören count, cursor, region, date_posted, sort_by und cache_timeout. Für sort_by sind beispielsweise die Werte most-liked, relevance und date-posted dokumentiert. date_posted akzeptiert Werte wie this-week oder all-time. Die genaue Parameterliste und die Bedeutung der Route finden Sie im TikTok-API-Routenverzeichnis.

Der Schlüssel wird als Query-Parameter license_key übergeben. Im folgenden Beispiel wird er aus der Umgebungsvariable JSONSCRAPER_TIKTOK_LICENSE_KEY ausgelesen, damit das Geheimnis weder im Code gespeichert noch protokolliert wird. Verwenden Sie für die Authentifizierung und Parameterauswahl die aktuellen Bedingungen Ihres Zugangs. Die Seite zur TikTok Scraper API enthält eine Produktbeschreibung sowie Links zur Demo und Dokumentation.

Die Suchantwort muss anhand ihrer tatsächlichen Struktur verarbeitet werden, statt eine einzige Array-Struktur vorauszusetzen. Im überprüften Beispiel lieferte die API einen Status auf oberster Ebene und ein Objekt tiktok. Videos können unter tiktok.aweme_list liegen; bei Suchergebnissen kommt auch tiktok.search_item_list[].aweme_info vor. Prüfen Sie beide Formen. In gefundenen Objekten sind, sofern vorhanden, die Video-ID, die Beschreibung, der Link, der Veröffentlichungszeitpunkt, Angaben zum Autor und Statistiken wie Aufrufe, Likes, Kommentare und geteilte Inhalte verfügbar. Kennzahlen und Felder müssen als optional behandelt werden: Der Code darf keine erfundenen Nullen einsetzen, wenn ein Wert fehlt.

Die Such-Paginierung verwendet cursor. Wenn das Skript die Ergebnisse weiter abruft, muss es den erhaltenen Wert als undurchsichtigen Token für die nächste Anfrage übergeben, statt ihn selbst zu berechnen. Für einen ersten Prototyp ist es sinnvoll, die Erfassung auf eine Seite pro Suchanfrage zu begrenzen. Das vereinfacht die Prüfung und sorgt für eine vorhersehbare Belastung. Anschließend kann die Paginierung mit einer Höchstzahl von Seiten und einem Schutz vor wiederholten Cursorn ergänzt werden.

Umgebung vorbereiten

Das Beispiel verwendet Python 3.8 oder neuer und die Standardbibliothek. Legen Sie den Schlüssel beispielsweise in einer macOS- oder Linux-Shell als Umgebungsvariable fest:

export JSONSCRAPER_TIKTOK_LICENSE_KEY="ihr_schlüssel"
python tiktok_demand.py

In Windows PowerShell lässt sich die Variable folgendermaßen setzen:

$env:JSONSCRAPER_TIKTOK_LICENSE_KEY="ihr_schlüssel"
python .\tiktok_demand.py

Das Skript stellt für jedes Schlüsselwort eine eigene Anfrage. Es prüft HTTP-Fehler, die JSON-Antwort und den Status auf oberster Ebene und extrahiert anschließend Objekte aus beiden bestätigten Array-Formen. Rohantworten werden zeilenweise in einer JSONL-Datei gespeichert: Jeder Eintrag enthält die Suchanfrage, den Beobachtungszeitpunkt und die ursprüngliche Antwort. Anschließend wird eine CSV-Datei mit einheitlichen Feldern erstellt. Der Schlüssel steht nicht im Code, und der geheime Inhalt wird nicht ausgegeben.

Beispiel: Suchergebnisse erfassen und normalisieren

import csv
import json
import os
import time
from datetime import datetime, timezone
from pathlib import Path
from urllib.error import HTTPError, URLError
from urllib.parse import urlencode
from urllib.request import Request, urlopen

BASE_URL = "https://tiktok.evelode.com/searchVideo"
QUERIES = [
    "Fehler bei automatischen Untertiteln",
    "wie füge ich schnell Untertitel hinzu",
    "Kurzvideos für Unternehmen schneiden",
]


def extract_videos(payload):
    """Unterstützt beide beobachteten Strukturen der Suchantwort."""
    tiktok = payload.get("tiktok") or {}
    videos = []

    aweme_list = tiktok.get("aweme_list") or []
    if isinstance(aweme_list, list):
        videos.extend(item for item in aweme_list if isinstance(item, dict))

    search_items = tiktok.get("search_item_list") or []
    if isinstance(search_items, list):
        for item in search_items:
            if not isinstance(item, dict):
                continue
            video = item.get("aweme_info")
            if isinstance(video, dict):
                videos.append(video)

    return videos


def fetch(query, license_key):
    params = {
        "keyword": query,
        "count": 20,
        "sort_by": "relevance",
        "date_posted": "this-month",
        "region": "US",
        "license_key": license_key,
    }
    url = BASE_URL + "?" + urlencode(params)
    request = Request(url, headers={"Accept": "application/json"})

    try:
        with urlopen(request, timeout=45) as response:
            payload = json.loads(response.read().decode("utf-8"))
    except HTTPError as exc:
        raise RuntimeError("API gab den HTTP-Status {} zurück".format(exc.code)) from exc
    except (URLError, TimeoutError, json.JSONDecodeError) as exc:
        raise RuntimeError("API-Anfrage konnte nicht ausgeführt oder verarbeitet werden") from exc

    if payload.get("status") != "ok":
        raise RuntimeError("Der API-Antwortstatus war nicht ok")
    return payload


def metric(statistics, key):
    value = statistics.get(key)
    return value if isinstance(value, (int, float)) else ""


def main():
    license_key = os.environ.get("JSONSCRAPER_TIKTOK_LICENSE_KEY")
    if not license_key:
        raise SystemExit("JSONSCRAPER_TIKTOK_LICENSE_KEY in der Umgebung festlegen")

    raw_path = Path("tiktok_raw.jsonl")
    csv_path = Path("tiktok_videos.csv")
    seen_ids = set()
    rows = []

    with raw_path.open("a", encoding="utf-8") as raw_file:
        for query in QUERIES:
            observed_at = datetime.now(timezone.utc).isoformat()
            payload = fetch(query, license_key)
            raw_file.write(json.dumps({
                "query": query,
                "observed_at": observed_at,
                "response": payload,
            }, ensure_ascii=False) + "\n")

            for video in extract_videos(payload):
                video_id = video.get("aweme_id")
                if not video_id or video_id in seen_ids:
                    continue
                seen_ids.add(video_id)

                author = video.get("author") or {}
                stats = video.get("statistics") or {}
                rows.append({
                    "query": query,
                    "observed_at": observed_at,
                    "video_id": video_id,
                    "created_at": video.get("create_time", ""),
                    "description": video.get("desc", ""),
                    "share_url": video.get("share_url", ""),
                    "author_username": author.get("unique_id", ""),
                    "author_nickname": author.get("nickname", ""),
                    "views": metric(stats, "play_count"),
                    "likes": metric(stats, "digg_count"),
                    "comments": metric(stats, "comment_count"),
                    "shares": metric(stats, "share_count"),
                })
            time.sleep(1)

    columns = [
        "query", "observed_at", "video_id", "created_at", "description",
        "share_url", "author_username", "author_nickname", "views",
        "likes", "comments", "shares",
    ]
    with csv_path.open("w", newline="", encoding="utf-8") as csv_file:
        writer = csv.DictWriter(csv_file, fieldnames=columns)
        writer.writeheader()
        writer.writerows(rows)

    print("{} eindeutige zurückgegebene Videos gespeichert in {}".format(len(rows), csv_path))


if __name__ == "__main__":
    main()

Der Wert count gibt hier die angeforderte Stichprobengröße pro Suchanfrage an. Das Skript geht nicht davon aus, dass die API exakt so viele Elemente zurückgeben muss: Die tatsächliche Zeilenzahl hängt von der Antwort ab. Die Pause zwischen Anfragen ist eine einfache Maßnahme zur Steuerung des Ausführungstempos, keine Aussage über ein Limit oder eine Dienstanforderung. Ergänzen Sie für einen produktiven Zeitplan begrenzte Wiederholungsversuche, eine Fehlerüberwachung und Regeln für eine zulässige Anfragehäufigkeit, die sich nach den Bedingungen Ihres Tarifs richten.

Die resultierende Tabelle lesen

In der CSV-Datei entspricht jede Zeile einem eindeutigen zurückgegebenen Video, das über eine der Suchanfragen gefunden wurde. Das Feld query zeigt, woher der Eintrag stammt, observed_at den Zeitpunkt der Momentaufnahme und video_id dient als Deduplizierungsschlüssel. Beschreibung und Link helfen Analysten, den Kontext zu prüfen. Die öffentlichen Zähler geben Aufschluss über die Reaktionen zum Erfassungszeitpunkt. Für langfristige Vergleiche sollten Sie einzelne Beobachtungen separat speichern und die Kennzahlenhistorie nicht überschreiben, wenn ihre Entwicklung nachvollziehbar bleiben soll.

Zähler für Aufrufe, Likes, Kommentare und geteilte Inhalte sind eine Momentaufnahme der öffentlichen Statistiken, die die API zum Zeitpunkt der Anfrage zurückgegeben hat. Sie können bei einzelnen Objekten fehlen. Ein leerer CSV-Wert bedeutet daher, dass die Antwort kein numerisches Feld enthielt. Das ist nicht dasselbe wie null und muss bei Aggregationen separat behandelt werden. Außerdem spiegeln die Ergebnisse die Stichprobe wider, die sich aus bestimmten Suchbegriffen, der Region, dem Zeitfilter und den Anfrageparametern ergibt. Sie beschreiben die erhaltenen Videos, nicht die Gesamtmenge der Inhalte oder die gesamte Zielgruppe der Plattform.

Für eine erste Bewertung der potenziellen Relevanz lässt sich eine transparente Regeltabelle erstellen: Übereinstimmungen mit Problembeschreibungen, Erwähnungen verwendeter Werkzeuge, Preis- oder Vergleichsfragen sowie konkrete Arbeitsszenarien. Es ist besser, einzelne Merkmale und die Begründung einer Bewertung zu speichern, als nur einen undurchsichtigen Punktwert festzuhalten. Ein Video mit einer Frage zur Genauigkeit automatischer Transkription könnte zum Beispiel mit „prüfen: Qualität wird diskutiert“ markiert werden, ein allgemeiner Tipp zum Erstellen von Inhalten hingegen mit „geringe thematische Relevanz“.

KI einsetzen, ohne sie zum Richter zu machen

Sobald eine Stichprobe vorliegt, kann ein Modell helfen, Beschreibungen anhand eines vorab festgelegten Schemas zu annotieren: Problem, erwähntes Werkzeug, Ton der Frage und vorhandenes Signal für eine Produktauswahl. Übermitteln Sie dem Modell nur die benötigten Felder – etwa Beschreibungstext und Eintrags-ID – und fordern Sie ein festes JSON mit Kennzeichnungen und einer kurzen Begründung an. Speichern Sie Version der Anweisung, Modell und Ergebnis neben der ursprünglichen Zeile, damit die Annotation wiederholt oder stichprobenartig von einem Menschen geprüft werden kann.

Eine hilfreiche Klassifizierungsanweisung sollte Schlussfolgerungen auf beobachtbare Merkmale beschränken. Bitten Sie das Modell festzustellen, ob der Text ein konkretes Problem mit Untertiteln, eine Bitte um eine Werkzeugempfehlung oder die Erörterung eines Arbeitsablaufs enthält. Sehen Sie für Fälle mit zu wenig Informationen die Kategorie „Kontext unzureichend“ vor. Das Modell sollte weder die Identität des Autors noch dessen Kaufabsicht oder demografische Merkmale aus einem einzelnen öffentlichen Video ableiten. Das Ergebnis ist eine Themenliste zur Analyse und keine Liste von Personen, die automatisch kontaktiert werden sollen.

Zur Bewertung der Qualität der Annotation wählen Sie eine Zufallsstichprobe aus und kennzeichnen dieselben Kategorien manuell. Vergleichen Sie die Übereinstimmung für jede Kennzeichnung und untersuchen Sie Fehler: Ein Modell könnte Sarkasmus als Beschwerde oder einen Lehrtipp als persönliche Erfahrung auffassen. Das Suchbegriffsverzeichnis und die Anweisung zu verbessern ist oft nützlicher, als das Modell sofort komplexer zu machen. Speichern Sie für Berichte die ursprünglichen Texte und Links entsprechend der geltenden Richtlinien zu Aufbewahrung und Zugriff.

Automatisierung nach Zeitplan und Qualitätskontrolle

Nach einem erfolgreichen manuellen Start kann das Skript nach Zeitplan über cron, einen Task-Scheduler einer Cloud-Plattform oder einen Orchestrator wie n8n ausgeführt werden. Die praktische Abfolge der Schritte bleibt gleich: Suchanfragen einlesen, API aufrufen, Status prüfen, Rohantwort speichern, Videos normalisieren, neue Momentaufnahmen aufzeichnen und einen Bericht erstellen. Der Schlüssel sollte über den Secret-Mechanismus der Ausführungsumgebung bereitgestellt werden, nicht in einer Tabelle, einem Workflow-Text oder einer Fehlermeldung.

Bei automatisierten Aufträgen sind vier Prüfungen hilfreich. Erstens: Die Anfrage wurde erfolgreich abgeschlossen und die Antwort ist gültiges JSON. Zweitens: Der Status auf oberster Ebene entspricht dem erwarteten Wert. Drittens: Der Handler verarbeitet beide Varianten der Suchstruktur und kommt mit fehlenden Feldern zurecht. Viertens: Die Zahl neuer eindeutiger Videos und die Zahl der Fehler werden protokolliert. Wenn plötzlich keine Ergebnisse vorliegen, sollte der Bericht die Stichprobe mit null Ergebnissen als Zustand dieses Laufs ausweisen, statt sie ohne Erklärung mit einem gewöhnlichen Erfolgsbericht gleichzusetzen.

Fügen Sie die Paginierung erst hinzu, wenn die erste Seite geprüft wurde. Für die Suchroute ist in der Dokumentation der Parameter cursor angegeben. Speichern Sie den erhaltenen Token und übergeben Sie ihn bei der nächsten Anfrage unverändert. Begrenzen Sie die maximale Zahl von Seiten pro Suchbegriff und beenden Sie die Schleife, wenn keine neuen Elemente, kein nächster Cursor oder ein bereits verarbeiteter Cursor vorliegt. Eine solche Begrenzung hält Laufzeit und Erfassungsumfang im Rahmen. Ein vorhandener Cursor ermöglicht zwar, die Ergebnisausgabe fortzusetzen, garantiert aber nicht die Vollständigkeit aller Veröffentlichungen.

Ein erneuter Lauf am selben Tag kann teilweise dieselben Videos zurückgeben. Verwenden Sie deshalb eine stabile Video-ID als Deduplizierungsschlüssel und speichern Sie die Historie als separate Einträge mit Beobachtungsdatum. Wenn eine zusammengefasste Ansicht benötigt wird, erstellen Sie sie auf Basis der Momentaufnahmen. So lässt sich unterscheiden, ob ein Video erstmals gefunden, in mehreren Suchanfragen angezeigt oder später erneut abgerufen wurde.

Kennzahlen: Was sich sinnvoll vergleichen lässt

Für die operative Überwachung sind die Zahl eindeutiger gefundener Videos pro Suchanfrage, der Anteil der Videos mit ausgefüllter Beschreibung, die Verteilung verfügbarer Reaktionen und die Häufigkeit bestimmter Themen nützlich. Bei Vergleichen zwischen Suchanfragen sollten Parameter und Erfassungszeitraum gleich bleiben. Wenn ein Lauf this-week und ein anderer this-month verwendet, kann sich der Unterschied in der Menge durch das Zeitfenster erklären. Ohne zusätzliche Analyse lässt er sich daher nicht als Veränderung des Interesses deuten.

Ein Vergleich der Kennzahlen eines Videos über die Zeit erfordert mehrere Momentaufnahmen und einheitliche Speicherung. Bewahren Sie für jedes Datum die Werte so auf, wie sie zurückgegeben wurden, und berechnen Sie anschließend die Differenz zwischen den Beobachtungen. Bezeichnen Sie eine Differenz nicht als Zuwachs pro Tag, wenn die tatsächlichen Laufintervalle voneinander abwichen. Ebenso kann eine Rangfolge nach Likes dabei helfen, auffällige Videos in der erfassten Stichprobe zu finden, misst aber weder den kommerziellen Erfolg des Autors noch den des Produkts.

Ein Abschlussbericht für das Marketingteam kann drei Ebenen verbinden: Beispiele für Formulierungen der Zielgruppe mit anklickbaren Links, thematische Gruppen von Problemen und eine quantitative Beschreibung der erfassten Stichprobe. Jede Schlussfolgerung sollte durch die Zahl der Beobachtungen, die verwendeten Suchanfragen und den Erfassungszeitraum ergänzt werden. So erhält die Führungskraft Kontext, und Analysten können die Filterung anhand derselben Rohdaten wiederholen.

Typische Fehler und wie man sie vermeidet

Ein leeres Feld als Nullwert behandeln

Fehlen Statistiken oder Angaben zum Autor, lässt der oben gezeigte Code die Zelle leer. Damit bleibt der Unterschied zwischen einem unbekannten Wert und einer gemessenen Null erhalten. Legen Sie für Analysen ausdrücklich fest, wie fehlende Werte behandelt werden, und geben Sie an, wie viele Zeilen bei einer bestimmten Berechnung ausgeschlossen wurden.

Annehmen, dass die Suche immer ein einziges Array zurückgibt

Bei Suchantworten kommen aweme_list sowie verschachtelte Elemente unter search_item_list[].aweme_info vor. Der Handler prüft beide Formen und ignoriert Elemente mit ungeeignetem Typ. Wenn sich das Schema ändert, helfen gespeicherte Rohantworten dabei, die neue Datenstruktur rasch zu erkennen. Test-Fixtures mit JSON-Dateien ermöglichen es, die Korrektur vor dem nächsten Lauf zu prüfen.

Dasselbe Video wiederholt als eigenständiges Signal zählen

Ein Video kann zu mehreren Suchbegriffen passen. Im Beispiel wird es nur einmal in die abschließende CSV aufgenommen; das Suchfeld weist auf den ersten Treffer in der aktuellen Reihenfolge hin. Wenn alle Zuordnungen „Video – Suchanfrage“ erhalten bleiben sollen, speichern Sie eine separate Zuordnungstabelle oder eine Liste von Suchanfragen pro ID, statt die Herkunft des Eintrags zu verwerfen.

Unvergleichbare Stichproben gegenüberstellen

Suchbegriff, Region, Zeitfilter, Sortierung und Ausführungsdatum beeinflussen die Stichprobe. Speichern Sie die Parameter zusammen mit der Antwort und ändern Sie jeweils nur einen Faktor, wenn die Untersuchung Varianten vergleicht. Dadurch lässt sich besser beurteilen, ob eine Ergebnisänderung auf das Suchverhalten oder auf veränderte Experimentparameter zurückzuführen ist.

Korrelation als Kaufabsicht ausgeben

Videobeschreibungen und öffentliche Zähler liefern Hinweise auf Inhalte und Reaktionen der Zielgruppe. Sie zeigen für sich genommen nicht, wer kaufbereit ist, ob eine Person Werbung gesehen hat oder wie hoch die Conversion ist. Nutzen Sie die Daten, um Hypothesen zu formulieren, Themen zu prüfen und Inhalte vorzubereiten. Bewerten Sie den Verkaufserfolg anhand eigener Kampagnendaten, die hinsichtlich Zeitraum und Zielgruppe auf diese Untersuchung abgestimmt sind.

So lässt sich die Pipeline erweitern

Wenn die Basisversion stabil läuft, kann eine Konfigurationsdatei mit Suchanfragen und Laufparametern ergänzt werden. So lässt sich das Suchverzeichnis ändern, ohne Python zu bearbeiten. Als nächster Schritt eignet sich eine Zuordnung von Suchanfragen zu Themenclustern, zum Beispiel „Erkennungsqualität“, „Schnittgeschwindigkeit“ und „Export“. Das Team sollte solche Kategorien definieren und anhand von Beispielen prüfen. Die API liefert Suchdaten; das thematische Schema legt die Forschung fest.

Als Alternative zu CSV eignet sich eine relationale Datenbank mit Tabellen für Läufe, Videos und Kennzahl-Momentaufnahmen. Ein eindeutiger Index für die Video-ID verhindert doppelte Einträge im Katalog, während Momentaufnahmen Veränderungen verfügbarer Zähler nachvollziehbar machen. Speichern Sie den Beobachtungszeitpunkt in UTC und die Version des Normalisierers. Bei Änderungen an der Extraktionslogik können archivierte JSONL-Dateien erneut verarbeitet und die Ergebnisse verglichen werden.

In n8n kann die Erfassung nach Zeitplan gestartet werden. Den Normalisierungscode können Sie als separaten Python-Dienst oder in einem Knoten ausführen, sofern die gewählte Umgebung die nötigen Operationen unterstützt. Für den ersten Schritt muss kein Modell eingebunden werden: Sorgen Sie zunächst für eine zuverlässige Datenerfassung. Messen Sie anschließend, wie viel Zeit die manuelle Klassifizierung benötigt und welche Kategorien wiederkehren. KI lohnt sich, wenn sie eine konkrete, wiederkehrende Arbeit verkürzt und ihre Kennzeichnungen überprüft werden können.

Wenn es bei der Fragestellung nicht um die Suche nach Formulierungen, sondern um die regelmäßige Beobachtung eines bestimmten Kontos geht, führt das offizielle Verzeichnis eine separate Route /getUserFeed mit den Parametern query, max_cursor und count auf. Für Hashtags gibt es die Route /getHashtagFeed mit dem Parameter cursor. Dies sind unterschiedliche Erfassungsszenarien. Die Auswahl des Endpunkts sollte von der Forschungsfrage ausgehen, nicht davon, dass ein Stichprobentyp durch einen anderen ersetzt wird.

Ergebnis: eine reproduzierbare Stichprobe statt einer Sammlung von Lesezeichen

Nach dem Lauf erhält das Team zwei nützliche Ergebnisse: ein Archiv der Rohantworten und eine Tabelle eindeutiger Videos mit Suchbegriff, Beobachtungsdatum, Link, Beschreibung und verfügbaren Kennzahlen. Darauf aufbauend lassen sich Fragen der Zielgruppe manuell gruppieren, Texte einer kontrollierten Klassifizierung übergeben, wöchentliche Zusammenfassungen erstellen und wiederholte Momentaufnahmen vergleichen. Der Code verarbeitet Anfragefehler ausdrücklich, prüft den Status auf oberster Ebene, unterscheidet zwei Varianten der Suchstruktur und behandelt fehlende Kennzahlen als fehlende Werte.

Das praktische Ergebnis für das Team ist eine transparentere Entscheidung darüber, welche Probleme in Interviews, auf einer Landingpage oder in einer Werbebotschaft geprüft werden sollten. Wenn die Untersuchung einen anderen Datentyp erfordert, ändern Sie die Suchanfragen oder verwenden Sie die passende dokumentierte Route. Prüfen Sie vor der Anpassung der Pipeline die TikTok-API-Dokumentation. Produktinformationen und den Einstieg zur Demo finden Sie auf der Seite zur TikTok Scraper API.

Dieser Ansatz löst die ursprüngliche Aufgabe: Die TikTok-Suche wird in einen reproduzierbaren Forschungsprozess verwandelt. Das Skript erfasst konkret zurückgegebene Videos und bewahrt deren Herkunft sowie Momentaufnahmen. Menschen oder ein überprüfbarer Klassifikator machen daraus Hypothesen zur Nachfrage. So erhält das Team eine Grundlage für die nächste Entscheidung und wahrt zugleich die Grenze zwischen öffentlichen Hinweisen aus Inhalten und bestätigten Verkaufsergebnissen.

Menschen

Für diesen Artikel sind noch keine Personen aufgeführt.

Lesen Sie weiterTikTok-Suchergebnisse mit Python archivieren
Lesen Sie den nächsten Artikel

Vom Artikel zur funktionierenden Integration

Entdecke die Social-Data-APIs von jsonscraper, teste Anfragen und entwickle deinen nächsten Workflow.

APIs entdecken