Construire un scraper TikTok reviews en 3 jours : retour d’expérience

personal projects

Project Overview

72 heures pour scraper les avis TikTok Shop. De la fausse piste à l’architecture solide

Les 24 premières heures d’exploration

Tout a commencé par une erreur classique : me fier aux tutoriels “copier-coller” trouvés en ligne. Je voulais aller vite et éviter de dépendre de services tiers, mais j’ai découvert à mes dépens que la documentation disponible sur le scraping de TikTok Shop était totalement périmée. Les URL proposées n’existaient pas, les sélecteurs CSS semblaient inventés, et rien ne tenait compte des récents changements de TikTok : obfuscation des classes, renforcement des contrôles anti-bot, blocages régionaux et apparition régulière de CAPTCHA. Résultat : je me suis retrouvé face à des pages vides, des erreurs 404, et une boucle infinie de “security check”.

J’ai consacré une première journée à tester ces approches classiques. Rapidement, j’ai compris leurs limites et que je prenais le problème dans le mauvais sens : au lieu de forcer le système, il fallait reproduire le vrai parcours d’un utilisateur mobile, dans le bon pays, avec toutes les contraintes que TikTok impose.

La clé : se comporter comme un vrai acheteur mobile

La vraie avancée est arrivée quand j’ai accepté cette évidence : TikTok Shop n’est pas conçu pour être consulté par un script, mais par un client mobile réel. Il fallait donc paraître crédible de bout en bout. Cela passait par une émulation mobile complète (pas seulement un user-agent, mais aussi les empreintes techniques comme la plateforme, les points tactiles et les UA Client Hints), l’utilisation d’adresses IP locales via des proxys résidentiels, et l’acceptation du passage obligé des CAPTCHA.

Une fois ce cap franchi, le reste est devenu plus simple : au lieu de me battre contre la plateforme, je me suis contenté de suivre le chemin naturel. Et c’est là que j’ai pu mettre en place une architecture robuste et reproductible.

Une double architecture : Apify Actor et script Python

J’ai finalement bâti deux solutions, adaptées à des besoins différents mais reposant sur la même logique. La première est un Actor déployé sur Apify, pensé pour tourner en production. Cet Actor ouvre la page produit en se faisant passer pour un vrai mobile, sort via un proxy résidentiel du pays ciblé, et résout automatiquement les CAPTCHA grâce à SadCaptcha. Une fois sur la page, il scrolle jusqu’aux avis, collecte les informations essentielles (nom abrégé de l’auteur, nombre d’étoiles, texte, date), et les enregistre dans un JSON propre. En option, le JSON peut être converti en CSV pour être directement exploité dans Excel ou Google Sheets. Pour la fiabilité, l’Actor prend une capture d’écran en cas d’erreur et applique un “circuit breaker” : après plusieurs échecs consécutifs, il fait une pause avant de relancer, ce qui évite de se comporter comme un bot agressif.

La seconde solution est une variante 100 % Python, sans dépendre d’une plateforme tierce. Elle reprend les mêmes principes mais avec un compromis : les CAPTCHA sont résolus à la main. C’est moins pratique pour du volume ou du multi-pays, mais parfait pour tester, débugger, ou valider rapidement un petit lot de produits. J’ai d’ailleurs déployé mon Actor Apify directement depuis mon poste via le CLI, ce qui m’a permis de tester localement avant de pousser en cloud.

Le flux de traitement

Pour rendre cette logique plus claire, j’ai schématisé le fonctionnement sous forme de diagramme. L’entrée est simple : une liste d’IDs produits et un marché (Vietnam, Arabie Saoudite…). Ensuite, le robot se comporte comme un téléphone : il ouvre la page en mobile, franchit le géoblocage avec une IP locale, résout les CAPTCHA, scrolle jusqu’aux avis et les collecte. À la sortie, on obtient un fichier JSON consolidé, optionnellement transformé en CSV. En cas d’échec, une capture d’écran et un rapport d’erreur sont produits.

Flowchart showing TikTok Shop review scraper process with product IDs, captcha solving, and JSON/CSV export

Les détails qui changent tout

Ce qui paraît anecdotique est en réalité crucial. Changer uniquement l’user-agent ne suffit pas : TikTok vérifie aussi la plateforme, les propriétés du navigateur, les points tactiles. Sans proxy résidentiel local, les pages restent vides ou inaccessibles, alors qu’avec une IP vietnamienne ou saoudienne, tout devient fluide. Bloquer trop de ressources côté navigateur casse les CAPTCHA et rend la navigation impossible. Et enfin, certaines options Chrome souvent recommandées dans les tutos (“désactiver la sandbox”, “désactiver certaines features”) déclenchent en réalité les alarmes anti-bot de TikTok.

J’ai aussi découvert à quel point la gestion des erreurs est essentielle. Un scraper qui insiste trop vite ou trop fort finit toujours bloqué. En appliquant des pauses mesurées et un circuit breaker, on obtient un comportement réaliste qui passe bien mieux.

Résultats et limites

Les tests menés sur le Vietnam et l’Arabie Saoudite montrent un taux de succès de 100 % pour la reconnaissance mobile et la résolution des CAPTCHA. En moyenne, un défi est résolu en 75 secondes, ce qui reste acceptable compte tenu du gain d’automatisation. Les avis sont correctement extraits dès lors qu’un proxy local est utilisé. Sans proxy, les résultats sont aléatoires et incomplets.

L’architecture est prête pour la production, mais avec une limite claire : l’usage de proxies résidentiels, qui sont payants chez Apify. Localement, si l’on dispose de ses propres proxys régionaux, la solution reste gratuite et tout aussi fiable.

reviews tiktok scraper result

Un outil utile pour le business

Au-delà du défi technique, ce travail a une vraie valeur pratique. Scraper les avis TikTok Shop permet d’analyser la perception locale d’un produit, de comparer les retours entre pays, et de comprendre les attentes des clients avant de lancer une stratégie marketing. Pour une marque comme Lancôme, cela signifie savoir comment ses produits sont reçus au Vietnam versus en Arabie Saoudite. Pour un concurrent, c’est un moyen de suivre la réputation de ses rivaux sur un marché donné.

En consolidant les avis dans un JSON ou un CSV, on peut directement alimenter des outils de data analysis ou des tableaux de bord marketing. L’architecture est prête à monter en charge et à s’étendre à d’autres marchés (Thaïlande, Indonésie, Malaisie, Philippines, Singapour).

Conclusion

Ce projet m’a pris 72 heures. Les 24 premières ont servi à explorer des pistes issues de tutoriels en ligne, qui se sont révélées dépassées. Cette étape m’a néanmoins permis d’identifier les erreurs à éviter et de poser les bases de la solution finale. Les quarante-huit suivantes ont servi à construire une solution solide : un scraper qui se comporte comme un vrai acheteur mobile, qui navigue depuis le bon pays, accepte les CAPTCHA, et restitue des avis propres et exploitables.

Aujourd’hui, je dispose d’un Actor Apify prêt pour la production, et d’une variante Python plus légère pour mes tests. Avec un proxy résidentiel adapté, la solution fonctionne déjà au Vietnam et en Arabie Saoudite, et peut s’étendre à tous les marchés de TikTok Shop. En somme, ce n’est pas seulement un scraper : c’est une porte d’entrée vers une meilleure compréhension des marchés locaux et des consommateurs.