1. Qu'est-ce que MediaCrawler ?
MediaCrawler est l'outil open source le plus complet pour l'extraction de données sur les réseaux sociaux chinois, avec plus de 64 000 étoiles sur GitHub, maintenu par le développeur NanmiCoder. Il repose sur le framework d'automatisation de navigateur Python + Playwright, et utilise les sessions de connexion actives pour appeler directement les API des plateformes, sans avoir à逆向 les algorithmes de chiffrement JS complexes, ce qui réduit considérablement la barrière technique.
Positionnement principal : un outil d'apprentissage destiné aux analystes de données, aux chercheurs en opinion publique et aux responsables de contenu, permettant de collecter en un clic les données publiques de 7 grandes plateformes de réseaux sociaux chinois.
Contrairement aux crawlers web génériques comme Crawl4AI, MediaCrawler se spécialise dans les plateformes de réseaux sociaux chinois, avec des logiques de signature et des règles d'analyse de données intégrées pour chaque plateforme, prêt à l'emploi. Si vous avez besoin de collecter des données sur des plateformes internationales, consultez notre analyse approfondie de Wiseflow.
2. Les 7 plateformes prises en charge et matrice des fonctionnalités
| Plateforme | Recherche par mots-clés | Extraction de posts spécifiques | Commentaires imbriqués | Page créateur | Cache de session | Pool de proxies IP | Nuage de mots des commentaires |
|---|---|---|---|---|---|---|---|
| Xiaohongshu | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Douyin | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Kuaishou | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Bilibili | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |
| Tieba | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Zhihu | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Les sept plateformes offrent exactement les mêmes fonctionnalités — c'est le plus grand avantage architectural de MediaCrawler : une interface unifiée, changer de plateforme ne nécessite que la modification d'un seul paramètre.
3. Analyse de l'architecture technique
L'architecture technique de MediaCrawler est conçue autour de la « réduction du risque de détection anti-bot » :
┌─────────────────────────────────────────────┐
│ Architecture MediaCrawler │
├─────────────────────────────────────────────┤
│ Couche utilisateur CLI / Interface WebUI │
├─────────────────────────────────────────────┤
│ Couche orchestration Planificateur → Interface crawler unifiée │
├─────────────────────────────────────────────┤
│ Couche exécution Playwright (mode CDP) │
│ ├─ Gestion des sessions (QR/Téléphone/Cookie) │
│ ├─ Calcul de signature JS (contexte navigateur réutilisé) │
│ └─ Anti-détection (empreinte navigateur réelle) │
├─────────────────────────────────────────────┤
│ Couche données CSV / JSON / JSONL / Excel │
│ SQLite / MySQL / PostgreSQL │
└─────────────────────────────────────────────┘
Principes techniques clés :
- Mode CDP (recommandé) : connexion au navigateur Chrome existant via Chrome DevTools Protocol, réutilisation des cookies, extensions et historique de navigation réels pour une anti-détection optimale
- Réutilisation des signatures : utilisation du contexte de navigateur avec session active pour obtenir les paramètres de signature de la plateforme via des expressions JS, sans逆向 d'algorithmes de chiffrement
- Cache de session : sauvegarde des cookies après la première connexion par QR code, réutilisation automatique lors des exécutions suivantes
4. Installation et démarrage rapide
4.1 Préparation de l'environnement
# 1. Installer uv (gestionnaire de paquets Python recommandé)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 2. Vérifier Node.js >= 16 (requis pour les signatures Douyin et Zhihu)
node --version
# 3. Cloner le projet
git clone https://github.com/NanmiCoder/MediaCrawler.git
cd MediaCrawler
# 4. Installer les dépendances (uv gère automatiquement la version Python et les dépendances)
uv sync
4.2 Configuration du navigateur Chrome (mode CDP)
MediaCrawler utilise le mode CDP par défaut, qui nécessite la configuration de Chrome :
- Installer Chrome >= 144
- Saisir
chrome://inspect/#remote-debuggingdans la barre d'adresse - Cocher "Allow remote debugging for this browser instance"
- Vérifier que
Server running at: 127.0.0.1:9222s'affiche
Si vous ne souhaitez pas utiliser le mode CDP, définissez ENABLE_CDP_MODE = False dans config/base_config.py.
4.3 Premier lancement
# Recherche par mots-clés sur Xiaohongshu (15 notes par défaut)
uv run main.py --platform xhs --lt qrcode --type search
# Au premier lancement, un QR code apparaît — scannez-le avec l'application Xiaohongshu
# La session est mise en cache automatiquement, pas besoin de rescanner
5. Configuration détaillée
config/base_config.py est le fichier de configuration principal. Voici les options les plus courantes :
# Plateforme cible : xhs | dy | ks | bili | wb | tieba | zhihu
PLATFORM = "xhs"
# Mots-clés de recherche (séparés par des virgules)
KEYWORDS = "Tutoriel Python,Programmation side-project,Outils IA"
# Mode de connexion : qrcode (QR code) | phone (téléphone) | cookie (saisie manuelle)
LOGIN_TYPE = "qrcode"
# Type d'extraction : search (recherche) | detail (post spécifique) | creator (page créateur)
CRAWLER_TYPE = "search"
# Format de stockage : csv | db | json | jsonl | sqlite | excel | postgres
SAVE_DATA_OPTION = "jsonl"
# Nombre maximum de notes à extraire par mot-clé
CRAWLER_MAX_NOTES_COUNT = 15
# Nombre de connexions simultanées (garder à 1 pour éviter le blocage)
MAX_CONCURRENCY_NUM = 1
# Activer l'extraction des commentaires
ENABLE_GET_COMMENTS = True
# Activer les commentaires imbriqués (niveau 2)
ENABLE_GET_SUB_COMMENTS = False
# Configuration du proxy IP
ENABLE_IP_PROXY = False
IP_PROXY_PROVIDER_NAME = "kuaidaili"
6. Extraction de données par plateforme
6.1 Extraction sur Xiaohongshu
# Recherche de notes par mots-clés
uv run main.py --platform xhs --lt qrcode --type search
# Extraction d'une note spécifique par ID
uv run main.py --platform xhs --lt qrcode --type detail
# Extraction de toutes les notes d'un créateur
uv run main.py --platform xhs --lt qrcode --type creator
Les données Xiaohongshu incluent : titre de la note, contenu textuel, liste d'images, nombre de likes, favoris, commentaires, informations de l'auteur, date de publication, etc.
6.2 Extraction sur Douyin
# Recherche de vidéos
uv run main.py --platform dy --lt qrcode --type search
# Vidéo spécifique par ID
uv run main.py --platform dy --lt qrcode --type detail
L'extraction sur Douyin nécessite Node.js pour le calcul de signatures. Les données incluent : titre de la vidéo, URL de lecture, image de couverture, likes, commentaires, partages, etc.
6.3 Extraction sur Bilibili
# Recherche de vidéos
uv run main.py --platform bili --lt qrcode --type search
# Vidéo spécifique (numéro BV)
uv run main.py --platform bili --lt qrcode --type detail
Les données Bilibili incluent : titre de la vidéo, numéro BV, nombre de vues, danmaku (commentaires flottants), likes, pièces, favoris, informations du créateur, etc.
6.4 Weibo / Tieba / Zhihu / Kuaishou
# Weibo
uv run main.py --platform wb --lt qrcode --type search
# Baidu Tieba
uv run main.py --platform tieba --lt qrcode --type search
# Zhihu
uv run main.py --platform zhihu --lt qrcode --type search
# Kuaishou
uv run main.py --platform ks --lt qrcode --type search
Le format de commande est identique pour toutes les plateformes — il suffit de modifier le paramètre --platform.
7. Stockage et export des données
MediaCrawler prend en charge 7 formats de stockage, les données étant sauvegardées par défaut dans le dossier data/ :
| Format | Cas d'usage | Caractéristiques |
|---|---|---|
| JSONL | Collecte quotidienne (par défaut) | Écriture ligne par ligne, reprise sur interruption |
| CSV | Analyse Excel | Ouverture directe dans les tableurs |
| JSON | Intégration applicative | Format standard, structures imbriquées |
| Excel | Rapports | Tableur formaté |
| SQLite | Base de données locale | Requêtes légères, pas de service supplémentaire |
| MySQL | Environnement de production | Déduplication, données à grande échelle |
| PostgreSQL | Entreprise | Base de données relationnelle complète |
# Passer au stockage MySQL
SAVE_DATA_OPTION = "db"
# Configurer la connexion dans db_config.py
DB_HOST = "localhost"
DB_PORT = 3306
DB_USER = "root"
DB_PASSWORD = "your_password"
DB_NAME = "media_crawler"
8. Utilisations avancées
8.1 Interface WebUI
# Terminal 1 : démarrer le backend API
uv run uvicorn api.main:app --port 8080 --reload
# Terminal 2 : démarrer le frontend (mode développement)
cd webui && npm install && npm run dev
# Accéder à http://localhost:5173/
# Ou construire la version production
cd webui && npm install && npm run build
# Démarrer uniquement le serveur API, accéder à http://localhost:8080
La WebUI fournit une interface de configuration visuelle pour utiliser le crawler sans ligne de commande.
8.2 Configuration du pool de proxies IP
Pour la collecte à grande échelle, il est recommandé d'activer un pool de proxies :
ENABLE_IP_PROXY = True
IP_PROXY_POOL_COUNT = 2
IP_PROXY_PROVIDER_NAME = "kuaidaili" # Supporte kuaidaili | wandouhttp | static
# Configuration proxy statique
IP_PROXY_PROVIDER_NAME = "static"
STATIC_PROXY_URL = "http://user:password@your_proxy:port"
8.3 Contrôle du parallélisme et de la fréquence
# Nombre de connexions simultanées (à utiliser avec prudence, un nombre trop élevé déclenche le blocage)
MAX_CONCURRENCY_NUM = 1
# Nombre maximum de collectes par mot-clé
CRAWLER_MAX_NOTES_COUNT = 50
# Page de départ pour la pagination
START_PAGE = 1
8.4 Génération de nuage de mots des commentaires
MediaCrawler intègre une fonction de nuage de mots pour les commentaires, générant automatiquement des visualisations :
# Activer dans base_config.py
# Nécessite l'installation préalable de wordcloud et autres dépendances
ENABLE_WORD_CLOUD = True
9. Conformité et risques juridiques
Rappel important : avant d'utiliser MediaCrawler, veillez à prendre connaissance des risques suivants :
- Conformité juridique : respectez la Loi sur la cybersécurité, la Loi sur la sécurité des données et la Loi sur la protection des informations personnelles ; l'usage commercial est interdit
- Règles des plateformes : respectez les fichiers robots.txt et les conditions d'utilisation de chaque plateforme, évitez la collecte massive
- Contrôle de la fréquence : maîtrisez la fréquence des requêtes pour ne pas surcharger les plateformes
- Usage des données : uniquement à des fins d'apprentissage et de recherche, pas d'usage illégal
- Protection de la vie privée : ne collectez ni ne diffusez d'informations personnelles privées
Référence : Collection de cas juridiques liés aux crawlers
10. Comparaison avec d'autres outils
| Fonctionnalité | MediaCrawler | Snscrape | Tweepy | Crawler personnalisé |
|---|---|---|---|---|
| Plateformes cibles | 7 grandes plateformes chinoises | Twitter/X | Twitter/X | Toute plateforme |
| Anti-détection | Navigateur réel via CDP | Aucune | API officielle | À implémenter |
| Gestion des sessions | QR/Téléphone/Cookie | Non requis | OAuth | Manuel |
| Stockage des données | 7 formats | Sortie console | JSON | Personnalisé |
| Facilité de prise en main | Faible (config et c'est parti) | Faible | Moyenne | Élevée |
| Extraction de commentaires | ✅ Commentaires imbriqués | ❌ | ✅ | À développer |
| État de maintenance | Actif (64K+ étoiles) | Stagnant | Actif | Dépend de vous |
Si vous avez besoin de capacités de crawl web générique, nous recommandons Crawl4AI ; pour la surveillance de flux d'information et le résumé IA, consultez Wiseflow. La valeur unique de MediaCrawler réside dans son adaptation approfondie aux réseaux sociaux chinois.
11. FAQ
Quelles versions Python MediaCrawler prend-il en charge ?
Python 3.11 est recommandé — c'est la version principale de test pour les dépendances du projet. Avec uv, la bonne version de Python est automatiquement sélectionnée.
Que faire si la connexion par QR code échoue ?
En mode CDP, assurez-vous que Chrome >= 144 est installé et que le débogage à distance est activé. Si le QR code est redemandé en boucle, fermez le navigateur et réactivez le débogage à distance. Vous pouvez aussi passer en HEADLESS = False et effectuer la vérification par glissement manuellement.
Peut-on extraire des données de plusieurs plateformes simultanément ?
Oui, mais l'exécution sérielle est recommandée. Spécifiez un paramètre --platform par exécution, puis passez à la plateforme suivante. Le multi-plateforme en parallèle risque de déclencher le blocage.
Où sont stockées les données ?
Par défaut dans le dossier data/ à la racine du projet, avec des sous-dossiers par plateforme. Vous pouvez personnaliser le chemin via SAVE_DATA_PATH.
MediaCrawler peut-il être utilisé commercialement ?
Non. Le projet utilise une licence d'apprentissage non commercial (NON-COMMERCIAL LEARNING LICENSE 1.1), qui interdit explicitement l'usage commercial. Pour un usage commercial, contactez l'auteur pour obtenir une licence.
12. Conclusion
MediaCrawler est l'outil open source le plus abouti pour la collecte de données sur les réseaux sociaux chinois, comme en témoignent ses 64 000+ étoiles GitHub. Ses avantages principaux :
- Couverture large : interface unifiée pour 7 plateformes, changement sans coût
- Anti-détection puissante : mode CDP réutilisant l'environnement navigateur réel
- Prise en main facile : installation en un clic avec uv, configuration immédiate
- Stockage flexible : 7 formats adaptés à différents scénarios
- Communauté active : mises à jour continues, réponses rapides
Pour les analystes de données, chercheurs en opinion publique et responsables de contenu, MediaCrawler est le meilleur point de départ pour apprendre la collecte de données sur les réseaux sociaux. Veillez toutefois à l'utiliser dans le respect de la réglementation, des règles des plateformes et de la vie privée des utilisateurs.