Les commentaires sur une vidéo TikTok publique sont une fenêtre sur la réaction d'une audience : le langage qu'elle emploie, le sentiment qu'elle exprime et les thèmes qui reviennent. Les chercheurs, les analystes et les équipes de contenu lisent ce signal en agrégat pour comprendre les tendances, et non pour tracer les personnes qui écrivent ces commentaires. Ce guide vous montre comment scraper des commentaires TikTok publics avec Python d'une manière qui fonctionne réellement sur une page rendue par JavaScript.
Pour être clair d'emblée : tout ce qui est présenté ici se limite aux commentaires publics sur des vidéos publiques. L'objectif est l'analyse agrégée : texte de commentaire, nombre de likes et de réponses que vous pouvez regrouper en résumés de sentiment et de thèmes. Il ne s'agit pas de construire des profils d'individus commentant. Les noms d'utilisateur et les mots écrits par les gens sont des données personnelles, donc l'ensemble du tutoriel les traite avec soin, et la section juridique en fin d'article couvre les règles avant que vous pointiez ceci vers quoi que ce soit de réel. Si vous souhaitez d'abord le tutoriel plus général, consultez notre guide sur comment scraper TikTok.
Ce que vous allez construire
Un petit script Python qui prend l'URL d'une vidéo TikTok publique, récupère la page entièrement rendue via la Crawling API avec un token JavaScript, fait défiler la page pour charger plus de commentaires et analyse une poignée de champs publics, principalement agrégés :
- Texte du commentaire les mots visibles de chaque commentaire public.
- Nombre de likes le nombre agrégé de likes qu'un commentaire affiche, et non les personnes derrière.
- Nombre de réponses le nombre agrégé de réponses qu'un commentaire a suscitées.
- Métadonnées de la vidéo l'URL publique de la vidéo à laquelle appartiennent les commentaires, pour l'attribution.
Remarquez ce qui est délibérément absent des données de sortie : pas de profils de commentateurs, pas de données d'abonnés, aucune tentative de lier un nom d'utilisateur à une identité réelle. Ce sont des données personnelles d'individus, et leur collecte est hors de portée ici, délibérément. Nous lirons un nom d'utilisateur sur la page car le balisage le contient, mais la section sur la confidentialité explique pourquoi vous ne devriez pas le stocker ni le republier lié à une identité.
Pourquoi une requête classique échoue sur TikTok
Demandez l'URL d'une vidéo TikTok publique avec un client HTTP basique et vous obtenez une réponse techniquement réussie et pratiquement vide. TikTok rend son contenu côté client : le vrai balisage, y compris les commentaires, n'apparaît qu'après que le JavaScript de la page s'exécute dans un navigateur et récupère des données depuis des endpoints internes. Une requête statique unique n'exécute jamais ce JavaScript, donc les commentaires que vous cherchez ne sont tout simplement pas dans le body.
En plus de cela, TikTok charge les commentaires de manière asynchrone et paresseuse au fur et à mesure du défilement, et il signale rapidement le trafic ressemblant à un scraper. Les plages d'IP de datacenter, les comportements de navigateur manquants et les patterns répétitifs sont limités en débit ou challengés avant que le contenu intéressant se charge jamais. Un scraper de commentaires fonctionnel a donc besoin de deux choses dans la même requête : un vrai navigateur qui rend et fait défiler la page, et une adresse IP que la plateforme perçoit comme un visiteur ordinaire. Vous pouvez construire cela vous-même avec un navigateur headless et un pool de proxies résidentiels rotatifs, mais maintenir cette pile opérationnelle représente la majeure partie du travail. La Crawling API regroupe les deux en un seul appel : vous envoyez une URL avec un token JavaScript, elle rend et fait défiler la page derrière une IP résidentielle de confiance, et elle retourne le HTML finalisé que vous pouvez analyser. Pour la mécanique sous-jacente, consultez comment crawler des sites JavaScript.
Crawlbase propose deux types de tokens. Le token normal récupère le HTML statique ; le token JavaScript (JS) rend d'abord la page dans un vrai navigateur. TikTok est fortement rendu côté client, donc vous avez besoin du token JS ici. Le token normal retourne la même coquille quasi vide qu'un simple fetch, sans commentaires à en extraire.
Prérequis
Quelques éléments à mettre en place d'abord. Aucun ne prend longtemps.
Notions de base en Python, HTML et CSS. Vous devez être à l'aise pour exécuter un script, installer des packages avec pip et lire des sélecteurs CSS pour pouvoir adapter les sélecteurs de commentaires quand le balisage de TikTok évolue.
Python 3.8 ou supérieur. Confirmez avec python --version. Si vous ne l'avez pas, installez-le depuis python.org et assurez-vous que pip est dans votre PATH.
Un compte Crawlbase et un token JS. Inscrivez-vous, ouvrez votre tableau de bord et copiez votre token JavaScript (JS) depuis la page de documentation du compte. Le niveau gratuit inclut jusqu'à 20 000 requêtes, largement suffisant pour suivre ce tutoriel. Traitez le token comme un mot de passe : il authentifie vos requêtes, donc gardez-le hors du contrôle de version.
Configurer le projet
Créez un environnement virtuel isolé, puis installez les bibliothèques dont le scraper a besoin.
python --version python -m venv tiktok_env source tiktok_env/bin/activate pip install crawlbase beautifulsoup4 pandas
Sous Windows, activez avec tiktok_env\Scripts\activate au lieu de la ligne source. Trois dépendances font le travail : crawlbase est le client officiel pour la Crawling API, beautifulsoup4 analyse le HTML retourné pour que vous puissiez extraire des champs par sélecteur, et pandas vous aide à regrouper les résultats pour une analyse agrégée ultérieure.
Étape 1 : récupérer la page vidéo rendue
Commencez par obtenir la page finalisée. Importez CrawlingAPI, initialisez-la avec votre token JS et demandez une URL de vidéo publique. Deux options sont importantes pour une cible rendue côté client : ajax_wait demande à l'API d'attendre que le contenu asynchrone termine de se charger, et page_wait maintient un délai fixe en millisecondes pour que les commentaires à rendu tardif apparaissent avant la capture. Vérifiez le statut avant d'analyser pour que les échecs restent visibles plutôt que silencieux.
from crawlbase import CrawlingAPI crawling_api = CrawlingAPI({"token": "YOUR_CRAWLBASE_TOKEN"}) options = { "ajax_wait": "true", "page_wait": 10000, "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36", } def fetch_html(url): try: response = crawling_api.get(url, options) if response["headers"]["cb_status"] == "200": return response["body"].decode("utf-8") print(f"Failed to fetch. Crawlbase status: {response['headers']['cb_status']}") return None except Exception as e: print(f"An error occurred: {str(e)}") return None if __name__ == "__main__": video_url = "https://www.tiktok.com/@nasa/video/7255327059302419738" html = fetch_html(video_url) print(html[:500] if html else "No HTML returned")
La Crawling API lit cb_status (legacy pc_status) depuis les en-têtes de réponse, qui rapporte le résultat de la récupération en amont indépendamment du transport proxy. Dix secondes de page_wait est un bon point de départ pour TikTok ; augmentez si les commentaires reviennent vides. L'exemple pointe sur un compte d'organisation publique précisément parce qu'il est public et impersonnel. Exécutez le script et vous devriez voir le vrai balisage rendu, ce qui confirme que le rendu fonctionne avant d'écrire un seul sélecteur.
TikTok nécessite une page rendue et défilée derrière une IP de confiance, en un seul appel. La Crawling API prend un token JS, exécute la page dans un vrai navigateur, fait défiler pour charger les commentaires paresseux et fait tourner les IPs résidentielles côté serveur, vous évitant d'avoir à gérer une flotte de navigateurs headless et un pool de proxies. Pointez-la sur une vidéo publique avec le niveau gratuit d'abord.
Étape 2 : analyser les commentaires en données structurées
Avec le HTML rendu en main, chargez-le dans BeautifulSoup et extrayez les champs publics. TikTok balisise ses composants avec des attributs data-e2e stables, qui sont bien plus durables que de chercher des noms de classes CSS profondément imbriqués et fréquemment renommés. La liste des commentaires se trouve dans un conteneur de commentaires ; chaque élément de commentaire porte son texte, un nombre de likes et un nombre de réponses. Nous lirons également le nom d'utilisateur de l'auteur de la vidéo sur l'en-tête de la page pour le contexte d'attribution.
from bs4 import BeautifulSoup def text_or_none(node): return node.text.strip() if node else None def scrape_video_info(soup): username = soup.select_one("span[data-e2e='browse-username']") return {"Video Author": text_or_none(username)} def scrape_comments_listing(soup): return soup.select( "div[data-e2e='search-comment-container'] > " "div[class*='CommentListContainer'] > " "div[class*='DivCommentItemContainer']" ) def parse_comment(comment): text = comment.select_one( "div[class*='DivCommentContentContainer'] " "p[data-e2e='comment-level-1'] > span" ) likes = comment.select_one("div[class*='DivLikeContainer'] span") replies = comment.select_one("div[class*='DivReplyContainer']") return { "Comment Text": text_or_none(text), "Like Count": text_or_none(likes), "Reply Count": text_or_none(replies), }
Chaque helper se protège contre un nœud manquant pour qu'un élément renommé ou absent retourne None plutôt que de lever une exception. Le sélecteur de liste de commentaires reflète la structure imbriquée de TikTok : un conteneur de commentaires, puis un conteneur de liste, puis des éléments de commentaire individuels. De chaque élément, nous extrayons le texte du commentaire, le nombre de likes et le nombre de réponses. Ces deux derniers sont des chiffres agrégés, exactement le type de signal non personnel que vous souhaitez pour l'analyse de thèmes et de sentiments.
TikTok modifie son balisage et ses noms de classes obfusqués sans préavis, c'est pourquoi ce code s'appuie sur des attributs data-e2e stables et des correspondances partielles class*= plutôt que sur des classes exactes fragiles. Quand un champ revient en None, ré-inspectez la page live dans les outils de développement de votre navigateur et mettez à jour le sélecteur. La maintenance périodique est normale pour tout scraper de production.
Étape 3 : gérer la pagination des commentaires par défilement
TikTok utilise le défilement infini pour charger plus de commentaires dynamiquement, donc un seul rendu ne capture que le premier lot. La Crawling API expose un paramètre scroll qui demande au navigateur headless de faire défiler la page et de charger plus de contenu avant de répondre. Par défaut, l'intervalle de défilement est de 10 secondes ; le paramètre scroll_interval vous permet de l'étendre pour que plus de lots de commentaires se chargent. Ajoutez ces options à une récupération paginée.
def fetch_html_with_scroll(url): scroll_options = { "ajax_wait": "true", "user_agent": options["user_agent"], "scroll": "true", "scroll_interval": 20000, } try: response = crawling_api.get(url, scroll_options) if response["headers"]["cb_status"] == "200": return response["body"].decode("utf-8") print(f"Failed to fetch. Crawlbase status: {response['headers']['cb_status']}") return None except Exception as e: print(f"An error occurred: {str(e)}") return None
Un scroll_interval de 20 secondes laisse le temps aux commentaires chargés paresseusement de se rendre entre les défilements. Des intervalles plus longs chargent plus de commentaires mais coûtent plus de temps d'attente par requête, donc ajustez selon le nombre de lots dont vous avez réellement besoin. Gardez le volume modeste : un échantillon représentatif est généralement suffisant pour l'analyse agrégée, et vous avez rarement besoin de chaque commentaire sur une vidéo.
Étape 4 : assembler le scraper complet
Câblez maintenant la récupération, le défilement et l'analyse dans un script fonctionnel. Il rend la page vidéo avec défilement, lit l'auteur public de la vidéo pour le contexte, analyse chaque commentaire chargé en texte, nombre de likes et nombre de réponses, et affiche du JSON propre que vous pouvez alimenter en analyse.
import json from crawlbase import CrawlingAPI from bs4 import BeautifulSoup crawling_api = CrawlingAPI({"token": "YOUR_CRAWLBASE_TOKEN"}) options = { "ajax_wait": "true", "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36", } def fetch_html_with_scroll(url): scroll_options = {**options, "scroll": "true", "scroll_interval": 20000} try: response = crawling_api.get(url, scroll_options) if response["headers"]["cb_status"] == "200": return response["body"].decode("utf-8") print(f"Failed to fetch. Crawlbase status: {response['headers']['cb_status']}") return None except Exception as e: print(f"An error occurred: {str(e)}") return None def text_or_none(node): return node.text.strip() if node else None def scrape_comments_listing(soup): return soup.select( "div[data-e2e='search-comment-container'] > " "div[class*='CommentListContainer'] > " "div[class*='DivCommentItemContainer']" ) def parse_comment(comment): text = comment.select_one( "div[class*='DivCommentContentContainer'] " "p[data-e2e='comment-level-1'] > span" ) likes = comment.select_one("div[class*='DivLikeContainer'] span") replies = comment.select_one("div[class*='DivReplyContainer']") return { "Comment Text": text_or_none(text), "Like Count": text_or_none(likes), "Reply Count": text_or_none(replies), } def main(): video_url = "https://www.tiktok.com/@nasa/video/7255327059302419738" html = fetch_html_with_scroll(video_url) if not html: return soup = BeautifulSoup(html, "html.parser") comments = [parse_comment(c) for c in scrape_comments_listing(soup)] output = {"Video URL": video_url, "Comments": comments} print(json.dumps(output, indent=2, ensure_ascii=False)) if __name__ == "__main__": main()
Le script indexe sa sortie sur l'URL de la vidéo plutôt que sur un individu, ce qui est le bon défaut pour le travail agrégé. Chaque enregistrement de commentaire contient uniquement le texte et deux comptages. Si vous souhaitez persister les résultats, écrivez-les dans un CSV ou une base de données, mais lisez d'abord la section confidentialité : le texte des commentaires et les noms d'utilisateur sont des données personnelles, et combien de temps vous les conservez et ce que vous en faites est une question juridique, pas seulement technique.
À quoi ressemble la sortie
Exécutez le script complet et vous obtenez un enregistrement propre des champs de commentaires publics, prêt à être agrégé pour une analyse de sentiment ou de thèmes.
{ "Video URL": "https://www.tiktok.com/@nasa/video/7255327059302419738", "Comments": [ { "Comment Text": "this is incredible", "Like Count": "1243", "Reply Count": "18" }, { "Comment Text": "how was this filmed?", "Like Count": "87", "Reply Count": "4" } ] }
À partir de là, l'agrégation est le maître mot. Regroupez le texte des commentaires pour faire émerger des thèmes communs, exécutez une analyse de sentiment sur le corpus pour jauger la réaction globale, et pondérez par les nombres de likes et de réponses pour trouver quels sentiments ont résonné. Cela vous indique comment une audience a réagi sans construire un dossier sur un seul commentateur. Si vous prévoyez d'alimenter un modèle avec ces données, notre guide sur comment structurer et nettoyer les données de scraping pour l'IA et le ML couvre la normalisation et la dépersonnalisation du texte avant l'entraînement.
Rester non bloqué
Même avec le rendu géré par la Crawling API, TikTok surveille le trafic ressemblant à un scraper. Quelques habitudes maintiennent une exécution saine, et elles s'appliquent à toute cible difficile et fortement défendue.
- Cadencez vos requêtes. Les rendus avec défilement prennent plus de temps que les récupérations statiques, donc ne les lancez pas en boucle serrée. Espacez-les et résistez à la parallélisation agressive.
- Misez sur la rotation. Un pool d'IPs résidentielles répartit les requêtes sur de nombreuses adresses d'utilisateurs réels pour qu'aucune seule ne déclenche une limite de débit. La Crawling API s'en charge pour vous ; si vous construisez votre propre stack, c'est la partie à maîtriser.
- Lisez les codes de statut. Une exécution qui commence à retourner des challenges ou des erreurs vous signale que le débit actuel ou le niveau d'IP n'est plus suffisant. Ralentissez plutôt que de forcer davantage.
- Gardez le volume bas. Un échantillon représentatif de commentaires est généralement suffisant pour l'analyse agrégée. Vous avez rarement besoin de chaque commentaire sur une vidéo virale.
Pour le guide complet, consultez comment scraper des sites web sans se faire bloquer. Si vous préférez router votre propre trafic via un pool rotatif plutôt que d'utiliser l'API managée, le Smart AI Proxy vous offre la même rotation résidentielle comme endpoint proxy direct.
Est-il légal de scraper des commentaires TikTok ?
C'est la section à lire avant d'écrire du code de production. Le scraping n'est pas intrinsèquement illégal, et les commentaires publics sur une vidéo publique sont visibles par quiconque sans connexion. Mais les Conditions d'utilisation de TikTok restreignent la collecte automatisée, et les commentaires sont des données personnelles : ils sont du contenu écrit par des personnes identifiables, souvent lié à un nom d'utilisateur. La légalité porte donc moins sur la publicité des données que sur ce que vous collectez, pourquoi, et ce que vous en faites ensuite. Lisez les Conditions d'utilisation de TikTok et son fichier robots.txt, et traitez les deux comme la frontière de ce que vous touchez.
Si vous traitez des données sur des personnes dans l'UE ou au Royaume-Uni, le RGPD s'applique, et le CCPA californien s'applique aux résidents de Californie. Les deux traitent les noms d'utilisateur et les commentaires rédigés par les utilisateurs comme des données personnelles, même lorsqu'ils sont publics. En pratique, cela signifie que vous avez besoin d'une base légale pour les traiter, vous devez minimiser ce que vous conservez, et vous devez honorer les demandes de suppression et d'opposition. La posture la plus sûre pour ce type de travail est l'analyse agrégée : dérivez des sentiments, des thèmes et des comptages, puis supprimez ou dépersonnalisez les commentaires bruts et les noms d'utilisateur. Ne construisez pas de profils de commentateurs individuels, ne republiez pas le commentaire d'une personne lié à son identité, et ne stockez pas de noms d'utilisateur liés à des opinions que vous en avez inférées. Le script de ce guide lit un nom d'utilisateur parce que la page l'expose, mais vous ne devriez pas le conserver lié à une identité.
Restez strictement du côté public, et ne le dépassez jamais. Ne scrapez pas de comptes privés, de contenu derrière une connexion, de messages directs ou de quoi que ce soit derrière une barrière d'abonnés. Ne contournez pas l'authentification ou les limites de débit, et ne redistribuez pas de vidéos ou médias protégés par le droit d'auteur. Pour tout usage réel, continu ou commercial, le bon outil est l'API officielle TikTok, y compris l'API Research lorsque vous y êtes éligible. C'est la voie sanctionnée, elle vous donne des conditions définies et une structure, et vous maintient dans les règles de TikTok. Cet article est un tutoriel technique limité aux commentaires publics pour l'analyse agrégée, pas une approbation de la collecte massive de données personnelles.
Points clés
- TikTok est rendu côté client et défendu contre les bots. Une requête simple retourne une coquille quasi vide sans commentaires, vous devez donc rendre et faire défiler la page avant de l'analyser.
-
Le rendu, le défilement et une IP de confiance appartiennent à un seul appel. La Crawling API avec un token JS fait les trois ;
ajax_wait,page_waitetscroll_intervalcontrôlent le temps d'attente et de chargement. -
Analysez des signaux stables. Les attributs
data-e2ede TikTok et les correspondances partiellesclass*=sont bien plus durables que les noms de classes obfusqués fragiles. - Agrégez, ne profilez pas. Récupérez le texte des commentaires, les nombres de likes et de réponses pour l'analyse de sentiment et de thèmes ; ne construisez jamais de profils de commentateurs individuels ni ne stockez de noms d'utilisateur liés à une identité.
- Respectez les règles et préférez l'API officielle. Les CGU de TikTok restreignent le scraping, le RGPD et le CCPA traitent les commentaires comme des données personnelles, et l'API officielle TikTok est la voie sanctionnée pour tout usage réel.
Foire aux questions
Pourquoi une requête simple ne retourne-t-elle aucun commentaire depuis TikTok ?
Parce que TikTok rend son contenu côté client avec JavaScript et charge les commentaires paresseusement au défilement. Le HTML initial est une coquille qui ne se remplit qu'après que les scripts de la page s'exécutent dans un navigateur, donc une requête HTTP brute retourne un body quasi vide. Pour obtenir des commentaires publics réels, vous devez rendre et faire défiler la page, ce que le token JS de la Crawling API et le paramètre scroll gèrent pour vous.
Ai-je besoin du token normal ou du token JS pour TikTok ?
Le token JS. Le token normal récupère le HTML statique, qui sur TikTok est la même coquille vide qu'un simple fetch retourne. Le token JS rend la page dans un vrai navigateur avant de restituer le HTML, donc les éléments de commentaires sont présents quand BeautifulSoup les analyse.
Comment charger plus que le premier lot de commentaires ?
Passez scroll: "true" à la Crawling API pour que le navigateur headless fasse défiler la page et déclenche le chargement infini de TikTok. Le paramètre scroll_interval, en millisecondes, contrôle le temps d'attente entre les défilements ; un intervalle plus long charge plus de lots de commentaires au prix de plus de temps d'attente par requête. Ajustez selon le nombre de commentaires dont vous avez réellement besoin, et gardez le volume modeste.
Quelles données de commentaires TikTok est-il sûr de collecter ?
Uniquement les commentaires publics sur des vidéos publiques, et idéalement seulement en agrégat : texte de commentaire regroupé en thèmes et sentiments, plus les nombres de likes et de réponses comme chiffres. Les comptes privés, le contenu derrière connexion, les messages directs et toute tentative de profiler des commentateurs individuels sont hors limites. Les noms d'utilisateur et le texte des commentaires sont des données personnelles, donc minimisez ce que vous conservez et dépersonnalisez autant que possible.
Devrais-je utiliser l'API officielle TikTok plutôt que de scraper ?
Pour tout usage réel, continu ou commercial, oui. L'API officielle TikTok, y compris l'API Research lorsque vous y êtes éligible, est la voie sanctionnée : elle offre des conditions définies, une structure garantie, et vous maintient dans les règles de TikTok. Scraper un petit échantillon de commentaires publics convient à la recherche agrégée légère sans accès API en place, à condition de respecter les conditions, le robots.txt, les limites de débit et la législation sur la confidentialité.
Comment éviter d'être bloqué en scrapant des commentaires TikTok ?
Gardez votre taux de requêtes par IP bas, espacez vos rendus avec défilement plutôt que de les boucler étroitement, limitez le volume à un échantillon représentatif et routez via des IPs résidentielles rotatives pour qu'aucune adresse unique ne déclenche une limite de débit. La Crawling API gère la rotation et un pool d'IPs de confiance pour vous. Surveillez les valeurs de cb_status et ralentissez dès que vous commencez à voir des challenges. Pour un tour d'horizon plus approfondi, consultez notre sélection des meilleurs scrapers TikTok pour collecter des données.
Crawlez n'importe quel site à grande échelle, sans combattre l'infrastructure.
Crawlbase gère les proxies, les empreintes et les CAPTCHA afin que votre équipe livre des pipelines de données au lieu de maintenir la plomberie de crawl. 1 000 requêtes gratuites, sans carte requise.
