Web scraping, prompt engineering, gestion de rate limit API, notifications via API Telegram, gestion des erreurs.
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 :
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.
{"id": <id annonce>, "composant_seul": true},
{"id": <id annonce>, "composant_seul": false}
Le scraping des annonces fonctionne en deux étapes :
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
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.
Le but est ensuite d'extraire les composants pour les comparer aux prix du marché.
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
{
"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é.
Avec toutes les données récoltées, je peux créer des objets Ordinateur ayant pour attributs les
composants et leurs prix.
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}
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.
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.
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.