Dénicheur
Dénicheur
Dénicheur est un système d'extraction de données produits qui combine scraping HTML, sélection par LLM et reverse-engineering d'API GraphQL en un workflow 3 étapes. Le système recherche un produit, utilise DeepSeek v3 via OpenRouter pour sélectionner le résultat le plus pertinent, puis extrait les données complètes (prix, historique, avis, médias) via l'API GraphQL interne de la source. Déployé sur Railway avec Docker.
Contexte
Dénicheur est un système d'extraction de données produits qui combine scraping HTML, sélection par LLM et reverse-engineering d'API GraphQL en un workflow 3 étapes. Le système recherche un produit, utilise DeepSeek v3 via OpenRouter pour sélectionner le résultat le plus pertinent, puis extrait les données complètes (prix, historique, avis, médias) via l'API GraphQL interne de la source. Déployé sur Railway avec Docker.
Le Parcours
Le Défi
Extraire des données produits structurées à grande échelle : les pages web changent, les anti-bots se renforcent, et sélectionner le bon produit parmi les résultats de recherche nécessite un jugement humain.
La Solution
Pipeline 3 étapes hybride humain-machine : scraping HTML pour la recherche, LLM (DeepSeek) pour la sélection intelligente, GraphQL reverse-engineered pour l'extraction exhaustive. Architecture async production-ready avec caching, retry et monitoring.
L'Impact
Automatisation complète de la veille produit pour Gyroly. Temps d'extraction : 3-5 secondes par produit vs 5-10 minutes manuelles. Fiabilité 99%+ grâce à la sélection IA.
Fonctionnalités Clés
Sélection IA (DeepSeek v3)
Prompt engineering avancé avec règles strictes de matching, vérification de marque, anti-accessoire. Le LLM choisit le produit le plus pertinent parmi les résultats.
Reverse-engineering GraphQL
Extraction des données complètes via l'API GraphQL interne : produit, prix, historique, avis, médias, breadcrumbs. Une seule requête pour tout.
Anti-détection robuste
Headers réalistes, rotation de proxies, délais aléatoires 2-5s, retry logic avec backoff exponentiel. Support proxy résidentiel optionnel.
Architecture async
FastAPI full async avec httpx, rate limiting SlowAPI, request tracing UUID, structured logging JSON, health checks.
Cloud storage R2
Upload parallèle async des images produits vers Cloudflare R2 (S3-compatible). Organisation par product ID, remplacement d'URL automatique.
CI/CD Docker → Railway
Multi-stage Docker build (builder + runner), non-root user, 8 workflows GitHub Actions, déploiement automatique sur Railway.
Processus de Développement
HTML Scraping
Requête GET sur la page de recherche. Parsing CSS selectors + regex. Cache TTL pour éviter les requêtes répétées.
Sélection IA
Envoi des résultats à DeepSeek v3 via OpenRouter. Prompt few-shot avec exemples correct/incorrect. Extraction JSON robuste (gère markdown).
Extraction GraphQL
POST sur l'API GraphQL interne avec le product ID sélectionné. Extraction de toutes les données structurées.
Normalisation
Nettoyage Unicode, mapping des propriétés via mappings.json, génération de slugs SEO, validation Pydantic v2.
Déploiement
Docker multi-stage → Railway PaaS. Sentry monitoring, structured logging, auto-deploy depuis GitHub.