# Amazon France Scraper - Documentation ## 🎯 Vue d'ensemble Le scraper Amazon France est un systĂšme de recherche de produits conçu pour Ă©viter la dĂ©tection anti-bot d'Amazon. Il utilise Crawl4AI avec des techniques avancĂ©es d'anti-dĂ©tection. ## đŸ›Ąïž Techniques anti-dĂ©tection ### 1. User-Agent rotatif - Pool de 5 User-Agents rĂ©alistes (Chrome, Firefox, Safari, Edge) - Rotation alĂ©atoire Ă  chaque requĂȘte - Headers complets mimant un vrai navigateur ### 2. Proxies rĂ©sidentiels - **10 proxies rotatifs** configurĂ©s - SĂ©lection alĂ©atoire pour chaque recherche - Format: `ip:port:username:password` - Configuration dans `/app/core/search_config.py` ### 3. DĂ©lais alĂ©atoires - Entre **1.5 et 4 secondes** entre les requĂȘtes - Simule le comportement humain - Évite les patterns de bot ### 4. Headers HTTP rĂ©alistes ```python { "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,...", "Accept-Language": "fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7", "Accept-Encoding": "gzip, deflate, br", "DNT": "1", "Connection": "keep-alive", "Upgrade-Insecure-Requests": "1", ... } ``` ### 5. Crawl4AI configuration - `headless=True` - Mode invisible - `--disable-blink-features=AutomationControlled` - DĂ©sactive la dĂ©tection d'automation - `wait_until="networkidle"` - Attend le chargement complet - `remove_overlay_elements=True` - Supprime les popups - Acceptation automatique des cookies ## 📩 DonnĂ©es extraites Pour chaque produit, le scraper extrait : | Champ | Type | Description | |-------|------|-------------| | `title` | string | Titre du produit | | `url` | string | URL Amazon | | `price` | float | Prix actuel en EUR | | `original_price` | float | Prix original si promotion | | `rating` | float | Note sur 5 Ă©toiles | | `reviews_count` | int | Nombre d'avis | | `image_url` | string | URL de l'image | | `in_stock` | bool | DisponibilitĂ© | | `prime` | bool | Éligible Prime | | `sponsored` | bool | Produit sponsorisĂ© | ## 🚀 Utilisation ### Backend (Python) ```python from app.services.amazon_scraper import scrape_amazon_search # Recherche simple products = await scrape_amazon_search("aspirateur", max_results=20) for product in products: print(f"{product.title} - {product.price}€") ``` ### API REST ```bash # Endpoint SSE (Server-Sent Events) GET /api/amazon/search?q=aspirateur&max_results=20 # Health check GET /api/amazon/health ``` ### Frontend (React) ```javascript // EventSource pour SSE const eventSource = new EventSource(`/api/amazon/search?q=${query}&max_results=20`); eventSource.addEventListener('progress', (event) => { const data = JSON.parse(event.data); // data.status: 'searching', 'completed', 'error' // data.results: array of products }); ``` AccĂšs direct : **http://localhost/amazon** (aprĂšs connexion) ## đŸ§Ș Tests ### Script de test complet ```bash # Lancer tous les tests python test_amazon_scraper.py ``` Tests inclus : 1. ✅ Recherche basique (5 produits) 2. ✅ RequĂȘtes multiples (clavier, souris, casque) 3. ✅ VĂ©rification anti-dĂ©tection ### Test manuel simple ```python import asyncio from app.services.amazon_scraper import test_amazon_scraper asyncio.run(test_amazon_scraper()) ``` ## ⚙ Configuration ### Proxies Modifiez `/app/core/search_config.py` : ```python AMAZON_PROXY_LIST_RAW = [ "ip1:port1:user1:pass1", "ip2:port2:user2:pass2", # ... ajoutez vos proxies ] ``` ### User-Agents Ajoutez dans `/app/services/amazon_scraper.py` : ```python AMAZON_USER_AGENTS = [ "Mozilla/5.0 (Windows NT 10.0; ...) Chrome/131.0.0.0", # ... ajoutez vos user-agents ] ``` ### DĂ©lais Modifiez la fonction `random_delay()` : ```python async def random_delay(min_seconds=1.5, max_seconds=4.0): delay = random.uniform(min_seconds, max_seconds) await asyncio.sleep(delay) ``` ## 🔍 SĂ©lecteurs CSS Amazon Le scraper utilise les sĂ©lecteurs suivants (mis Ă  jour pour 2024) : ```python # Cartes produits product_cards = soup.find_all('div', {'data-component-type': 's-search-result'}) # Titre title_elem = card.select_one('h2 a span, h2 span') # Prix actuel price_elem = card.select_one('.a-price .a-offscreen') # Prix original (promo) original_price_elem = card.select_one('.a-price.a-text-price .a-offscreen') # Note rating_elem = card.select_one('[aria-label*="Ă©toile"], [aria-label*="star"]') # Nombre d'avis reviews_elem = card.select_one('[aria-label*="Ă©toile"] + span') # Image img_elem = card.select_one('img.s-image') # Prime prime = card.select_one('[aria-label*="Prime"], i.a-icon-prime') ``` ## 📊 Performances - **Vitesse** : ~3-5 secondes pour 20 produits - **Taux de succĂšs** : ~95% (avec proxies) - **Limite recommandĂ©e** : Max 20 produits par requĂȘte - **DĂ©lai entre requĂȘtes** : 2-5 secondes ## ⚠ Limitations connues 1. **CAPTCHA** : Peut survenir en cas d'utilisation intensive - Solution : Rotation des proxies + dĂ©lais plus longs 2. **GĂ©olocalisation** : Les proxies doivent ĂȘtre français/europĂ©ens - Amazon.fr peut bloquer les IPs non-europĂ©ennes 3. **Structure HTML** : Amazon peut modifier ses sĂ©lecteurs - VĂ©rifier rĂ©guliĂšrement les sĂ©lecteurs CSS 4. **Rate limiting** : Amazon limite les requĂȘtes par IP - Utiliser les proxies rotatifs ## 🐛 Debugging ### Logs Les logs dĂ©taillĂ©s sont disponibles dans la console : ```python logger.info(f"🔍 Searching Amazon France: {query}") logger.info(f"📍 URL: {search_url}") logger.debug(f"🎭 User-Agent: {user_agent}") logger.debug(f"🌐 Using proxy: {proxy['server']}") ``` ### Messages d'erreur courants | Erreur | Cause | Solution | |--------|-------|----------| | `CAPTCHA detected` | Trop de requĂȘtes | Attendre + changer de proxy | | `Bot detection triggered` | Mauvais User-Agent | VĂ©rifier USER_AGENTS | | `No products found` | RequĂȘte vide ou blocage | VĂ©rifier la recherche | | `Timeout` | Connexion lente | Augmenter `page_timeout` | ### Mode debug Crawl4AI ```python browser_config = BrowserConfig( headless=False, # Voir le navigateur verbose=True, # Logs dĂ©taillĂ©s ... ) ``` ## 📈 Évolutions futures - [ ] Cache Redis pour Ă©viter les requĂȘtes rĂ©pĂ©tĂ©es - [ ] Pagination automatique (>20 produits) - [ ] DĂ©tection automatique de CAPTCHA - [ ] RĂ©solution de CAPTCHA (service tiers) - [ ] Scraping des dĂ©tails produit (description, specs) - [ ] Support Amazon.de, Amazon.es, etc. - [ ] Monitoring des prix en temps rĂ©el - [ ] Alertes de baisse de prix ## 🔐 SĂ©curitĂ© & LĂ©galitĂ© ⚠ **Important** : Ce scraper est destinĂ© Ă  un usage personnel uniquement. - ✅ Usage personnel/Ă©ducatif - ✅ Recherche de produits - ✅ Comparaison de prix - ❌ Revente de donnĂ©es - ❌ Usage commercial intensif - ❌ Contournement de CAPTCHA Ă  grande Ă©chelle Respectez les [Conditions d'utilisation Amazon](https://www.amazon.fr/gp/help/customer/display.html?nodeId=201909000). ## 📞 Support En cas de problĂšme : 1. VĂ©rifier les logs (`logger.info/debug/error`) 2. Tester avec le script `test_amazon_scraper.py` 3. VĂ©rifier la configuration des proxies 4. Consulter la [documentation Crawl4AI](https://crawl4ai.com/) ## 🎉 CrĂ©dits - **Crawl4AI** : Framework de scraping IA - **BeautifulSoup** : Parsing HTML - **FastAPI** : API backend - **React** : Interface frontend - **Shadcn UI** : Composants UI