Scarnox · Blog

Suivi des prix par web scraping : un guide pratique

Le suivi des prix consiste à vérifier le prix d'un produit sur un ensemble de sites, selon un calendrier, et à enregistrer ce que vous voyez afin de comparer dans le temps. Les distributeurs, les places de marché et les analystes l'utilisent tous. Le scraping de prix est aussi l'un des moyens les plus courants de rencontrer un captcha, il vaut donc la peine de bien concevoir le projet. Ce guide couvre ce qu'il faut surveiller, comment extraire des nombres de pages qui n'ont jamais été conçues pour cela, comment stocker les changements et déclencher des alertes, et comment rester dans les règles d'un site pendant que vous le faites.

Commencez par une source que vous avez le droit d'utiliser

Avant d'écrire la moindre ligne de code, vérifiez si le site propose un moyen officiel d'obtenir les données : un flux produit, une API, ou un programme partenaire. Ces solutions sont plus fiables que le scraping, et elles suppriment l'essentiel des risques juridiques et techniques. Le scraping est la solution de repli pour les pages publiques lorsqu'aucune voie officielle n'existe, et les conditions d'utilisation ainsi que le robots.txt s'appliquent toujours. L'aperçu juridique couvre les questions générales.

Une architecture en cinq parties

Un suivi fiable comporte cinq parties, et les garder séparées facilite le débogage :

  1. Planificateur. Décide quelles pages produit visiter et quand. Répartissez les visites sur la journée au lieu de tout vérifier à la même minute.
  2. Récupérateur. Télécharge la page, avec un rythme poli, des nouvelles tentatives et un cache.
  3. Analyseur. Extrait le prix, le contexte de la devise et l'état du stock.
  4. Stockage. Conserve chaque observation avec un horodatage, pour disposer d'un historique.
  5. Alerteur. Compare la nouvelle valeur à la précédente et vous prévient lorsqu'elle franchit un seuil que vous avez défini.

Extraire les prix de pages désordonnées

Les prix apparaissent sous de nombreuses formes : avec des séparateurs de milliers, avec des virgules décimales, avec un libellé avant le nombre, ou répartis sur plusieurs éléments. Gardez l'analyseur petit et testez-le sur des exemples réels. Voici une version qui suppose le format courant, avec des virgules pour les milliers et un point pour les décimales. Normalisez les autres formats avant de l'appeler :

import re
from decimal import Decimal, InvalidOperation

PRICE_PATTERN = re.compile(r"\d{1,3}(?:,\d{3})*(?:\.\d{1,2})?|\d+(?:\.\d{1,2})?")

def parse_price(text: str) -> Decimal | None:
    """Renvoie le premier nombre du texte sous forme de Decimal, ou None."""
    match = PRICE_PATTERN.search(text.replace(" ", " "))
    if not match:
        return None
    try:
        return Decimal(match.group(0).replace(",", ""))
    except InvalidOperation:
        return None

print(parse_price("Now 1,249.50 in stock"))  # Decimal('1249.50')
print(parse_price("Sold out"))               # None

Utilisez Decimal, et non float, pour tout ce que vous comparerez ou totaliserez. Les arrondis en virgule flottante peuvent faire paraître deux prix égaux différents. Conservez le texte brut à côté de la valeur analysée, afin de pouvoir corriger un bug d'analyse plus tard sans récupérer à nouveau chaque page.

Stocker l'historique et détecter les changements

Un prix isolé n'est qu'un instantané. La valeur d'un suivi, c'est l'historique. Stockez une ligne par observation, avec l'identifiant du produit, la source, l'horodatage, la valeur analysée et le texte brut. Alors, l'alerte n'est qu'une comparaison simple avec la ligne précédente. N'alertez que sur les changements significatifs, comme une baisse dépassant un pourcentage défini, ou un produit qui passe en rupture de stock, afin de ne pas être submergé de bruit.

Gérer les variantes et les lots

Une page produit affiche souvent plusieurs prix : un par taille ou par couleur, un prix de lot, un prix réservé aux membres, ou un prix qui n'apparaît qu'après une sélection. Décidez avant de construire ce que le suivi doit enregistrer. Une approche courante consiste à stocker l'identifiant de la variante à côté du prix, afin qu'un changement sur une taille n'apparaisse pas comme un changement sur l'ensemble du produit. Soyez prudent avec les prix « à partir de » et les prix d'origine barrés, car un analyseur qui retient le mauvais nombre génère de fausses alertes. Stockez le texte du libellé à côté de chaque valeur, afin de vérifier ce qui a été lu lorsqu'une alerte semble erronée.

Planifier avec politesse

Vérifiez chaque produit à un intervalle qui correspond à la fréquence réelle de ses changements de prix. Un produit dont le prix change chaque jour n'a pas besoin d'une vérification toutes les heures. Ajoutez une variation aléatoire à chaque visite, limitez le nombre de requêtes par site et par heure, et mettez en cache les résultats pour l'intervalle choisi. Ces habitudes gardent votre charge basse et vos données cohérentes.

Lorsque la page vous bloque

Les pages de prix sont souvent la cible d'accès automatisés, vous pouvez donc rencontrer un blocage, une limitation de débit ou un captcha. Reculez lorsque vous voyez un 429 ou un 503, et cessez de visiter un site qui continue à vous refuser l'accès. Si un captcha apparaît sur une page que vous êtes autorisé à automatiser, le type de captcha actuellement disponible chez Scarnox est PopularCaptcha. Le guide Python PopularCaptcha montre le flux du jeton. Lisez scraper sans se faire bloquer avant d'ajouter davantage de mécanismes, car la maîtrise du rythme résout en général plus de problèmes que n'importe quel outil supplémentaire.

Certaines pages affichent leurs prix grâce à JavaScript. Pour celles-ci, suivez la démarche décrite dans scraper des sites JavaScript.

Scraper de manière responsable

Prochaines étapes

Commencez avec un crédit d'essai gratuit, sans carte bancaire : créez un compte et testez le flux PopularCaptcha sur une page que vous êtes autorisé à automatiser. Pour les tarifs actuels, consultez la page tarifs.