← Retour aux projets

Bot bonnes affaires Leboncoin

Python Requests Web scraping IA Automatisation Terminé

Ce que j'ai appris

Web scraping, prompt engineering, gestion de rate limit API, notifications via API Telegram, gestion des erreurs.

Code sur GitHub

Durant l'été 2026, j'ai acheté un ordinateur d'occasion sur Leboncoin. J'ai remarqué qu'au vu des prix du marché actuel, il était bien plus rentable de revendre un ordinateur en pièces détachées plutôt qu'en un seul bloc. J'ai donc décidé de créer de A à Z un bot qui me tiendrait au courant des bonnes affaires mises en ligne sur Leboncoin.

Même si ce projet est rapidement réalisable avec une IA, j'ai décidé de le réaliser quasi entièrement moi-même, en utilisant l'IA uniquement pour des renseignements ponctuels ou de la syntaxe.

Objectif : avoir un bot qui connaît les prix du marché de chaque composant, qui scanne les nouvelles annonces, et qui me prévient sur Telegram lorsqu'il repère une bonne affaire.

Technologies : Python, web scraping

Voici les principales étapes de la mise en place du projet, dans l'ordre chronologique. Si l'explication technique semble parfois vague, n'hésitez pas à aller jeter un œil au code sur GitHub (lien ci-dessus).

Le bot repose sur deux programmes distincts, lancés à des moments différents sur mon serveur personnel :

Schéma du pipeline du bot : scraping des prix et des annonces, extraction des composants, filtrage, estimation du prix de revente, alerte Telegram
Pipeline complet du bot

1. Scraping du prix du marché

Le but est de récupérer un prix minimum, maximum, moyen et médian pour chaque composant de ma liste. Le programme prend un composant, le recherche sur Leboncoin, calcule ces valeurs, puis les écrit dans un fichier JSON.

Un filtre IQR (qui élimine les valeurs aberrantes) et une exclusion des annonces contenant certains mots bannis viennent compléter le traitement.

Problème : lors de la recherche d'un composant, on tombe souvent sur des PC complets qui le contiennent, sur des accessoires seuls, ou sur des composants vendus pour pièces.
Solution : utilisation d'un petit modèle d'IA auquel j'envoie la description de chaque annonce, qui renvoie un booléen indiquant si le composant est vendu seul, sous ce format :
{"id": <id annonce>, "composant_seul": true},
{"id": <id annonce>, "composant_seul": false}
Problème : en faisant ça, la limite de TPM (tokens par minute) de l'API est rapidement atteinte.
Solution : mise en place de délais adaptatifs en fonction du nombre de tokens déjà utilisés, et envoi des annonces par petits paquets plutôt que d'un coup.

2. Scraping des annonces

Le scraping des annonces fonctionne en deux étapes :

1. Récupération des ID des annonces non visitées

J'utilise l'API Leboncoin pour récupérer la liste des ID d'annonces correspondant à une recherche donnée. Par exemple, pour la recherche « PC gamer », j'obtiens :

122398
122344
122120
122103

2. Récupération des informations de chaque annonce

Je fais ensuite une requête pour chaque annonce, qui transforme un long document JSON en objet Annonce, avec les attributs id, title, body, price... directement utilisables dans le programme.

3. Extraction des composants

Le but est ensuite d'extraire les composants pour les comparer aux prix du marché.

Problème : il est très difficile, voire impossible, d'extraire proprement ces informations avec un algorithme classique à partir d'une description écrite arbitrairement par un humain.

Par exemple, la description suivante est très compréhensible pour un humain, mais comment en extraire proprement les informations ? Un vendeur écrira « i3 12100f », un autre « Intel i3-12100F », etc.

Bonjour, je vends mon pc gamer très peu utilisé, parfait pour jouer à des jeux comme fortnite (250 fps), Valorant (300 fps), gta 5 (150 fps).

Également parfait pour la rentrée et les études. Le pc a été réinitialisé et est prêt à l'emploi. La licence Windows 11 professionnel est incluse.

Les composants sont :
I3 12100f
16go ram 3200mHz rgb
GTX 1660 super
H610M Asrock
SSD 256go Kingston
450w bronze Cooler Master
Boîtier rgb Msi mag forge m100a (protection vitre toujours présente)

Il est vendu avec son câble d'alimentation

Solution : récupérer une liste des composants actuellement en circulation, dont je connais déjà les prix, et demander à un modèle d'IA de me renvoyer un JSON au format suivant :
{
  "cpu": "...",
  "gpu": "...",
  "ram": "...",
  "stockage SSD": "...",
  "stockage HDD": "...",
  "alimentation_w": ...,
  "prix": ...,
  "etat": "...",
  "opportunite": "...",
  "raison": "..."
}

J'ai choisi le modèle llama-3.3-70b-versatile de Groq, gratuit pour mon usage.

Ainsi, pour chaque annonce, je peux construire un objet Ordinateur avec ses composants. Si un composant n'est pas présent dans ma liste, il est ajouté pour le prochain scrapping des prix du marché.

4. Création des objets Ordinateur

Avec toutes les données récoltées, je peux créer des objets Ordinateur ayant pour attributs les composants et leurs prix.

Problème : les annonces LBC manquent souvent de détails. Il est rare de tomber sur une annonce où chaque composant et sa référence exacte sont présents.
cpu : autre : Intel Core i7-3770 : -1
gpu : GTX 1660 Super : {'min': 75, 'max': 130, 'mediane': 99.0, 'moyenne': 96.05, 'nb': 22}
ssd : 256GB SSD : {'min': 15, 'max': 45, 'mediane': 25.0, 'moyenne': 25.75, 'nb': 20}
hdd : 1TB HDD : {'min': 10, 'max': 55, 'mediane': 25.0, 'moyenne': 28.86, 'nb': 14}
ram : autre : 19,5 Go DDR3 : -1
prix : [350]
opportunité : None
prix revente : {'min': 100, 'max': 230, 'moyenne': 150.66, 'mediane': 149.0}

cpu : i5-12400F : {'min': 70, 'max': 150, 'mediane': 115, 'moyenne': 118.55, 'nb': 11}
gpu : RTX 4060 : {'min': 180, 'max': 400, 'mediane': 250.0, 'moyenne': 265.7, 'nb': 20}
ssd : null : -1
hdd : null : -1
ram : null : -1
prix : [750]
opportunité : 6
prix revente : {'min': 250, 'max': 550, 'moyenne': 384.25, 'mediane': 365.0}
Solution : appliquer un poids à chaque composant dans le prix final d'un PC. Ce n'est pas une solution magique, mais ça amortit la chute du prix de revente estimé lorsqu'un composant n'est pas précisé.

Par exemple, la RAM représentant en moyenne 15% du prix d'une config, le prix de revente affiché après ajustement sera relevé en conséquence.

5. Sélection des annonces intéressantes et alerte Telegram

Si le prix de revente médian dépasse le prix d'achat, l'ordinateur est marqué comme intéressant. Un bot Telegram m'envoie alors une notification avec les informations de l'annonce et un lien direct.

🔔 Alerte Telegram
🔥 Pc gamer
💰 Prix demandé : 550€
Prix de revente estimé :
min : 606.67€ | max : 1180.0€
moyenne : 832.24€ | médiane : 766.67€
📈 Marge potentielle : 216.67€
Composants
🖥 CPU : i5-13600K
min : 180€ | max : 315€
moyenne : 231.67€ | médiane : 200€
🎮 GPU : RTX 3060
min : 200€ | max : 300€
moyenne : 224.17€ | médiane : 205.0€
🧠 RAM : 16GB DDR4
min : 25€ | max : 100€
moyenne : 64.5€ | médiane : 70.0€
💾 SSD : 1TB SSD
min : 50€ | max : 170€
moyenne : 103.84€ | médiane : 100€
💿 HDD : —
🔗 Voir l'annonce
Je vends mon pc gamer en très bon état à 550€, les composants sont en photo. Le prix est négociable à la limite du raisonnable.

Limites et pistes d'amélioration

Les poids des composants sont assez arbitraires et peuvent parfois fausser le prix de revente d'où la vérification humaine. De plus certains composants ne sont jamais mentionnés mais peuvent valoir pas mal d'argent : boitier, alimentation, carte mère.