Files
scrap/detail_produit_backmarket.py
2026-01-13 19:49:04 +01:00

124 lines
3.4 KiB
Python
Executable File

#!/usr/bin/env python3
"""Détail complet du produit Backmarket extrait."""
from pricewatch.app.stores.backmarket.store import BackmarketStore
import json
# Charger la fixture
with open("scraped/backmarket_pw.html", "r", encoding="utf-8") as f:
html = f.read()
url = "https://www.backmarket.fr/fr-fr/p/iphone-15-pro"
store = BackmarketStore()
snapshot = store.parse(html, url)
print("=" * 80)
print("DÉTAIL COMPLET DU PRODUIT - BACKMARKET")
print("=" * 80)
# IDENTITÉ
print("\n📱 IDENTITÉ DU PRODUIT")
print("-" * 80)
print(f"Nom: {snapshot.title}")
print(f"Store: {snapshot.source.upper()}")
print(f"Référence (SKU): {snapshot.reference}")
print(f"URL: {snapshot.url}")
# PRIX
print("\n💰 INFORMATIONS PRIX")
print("-" * 80)
print(f"Prix: {snapshot.price} {snapshot.currency}")
if snapshot.shipping_cost:
print(f"Frais de port: {snapshot.shipping_cost} {snapshot.currency}")
else:
print(f"Frais de port: Non spécifié")
# DISPONIBILITÉ
print("\n📦 DISPONIBILITÉ")
print("-" * 80)
print(f"Stock: {snapshot.stock_status}")
print(f"Date d'extraction: {snapshot.fetched_at.strftime('%Y-%m-%d %H:%M:%S')}")
# IMAGES
print("\n🖼️ IMAGES")
print("-" * 80)
print(f"Nombre d'images: {len(snapshot.images)}")
if snapshot.images:
for i, img in enumerate(snapshot.images[:5], 1):
print(f" [{i}] {img}")
if len(snapshot.images) > 5:
print(f" ... et {len(snapshot.images) - 5} autres images")
else:
print(" Aucune image extraite")
# CATÉGORIE
print("\n📂 CATÉGORIE")
print("-" * 80)
if snapshot.category:
print(f"Catégorie: {snapshot.category}")
else:
print("Catégorie: Non extraite")
# CARACTÉRISTIQUES
print("\n🔧 CARACTÉRISTIQUES TECHNIQUES")
print("-" * 80)
if snapshot.specs:
print(f"Nombre de caractéristiques: {len(snapshot.specs)}")
for key, value in snapshot.specs.items():
print(f"{key}: {value}")
else:
print("Aucune caractéristique technique extraite")
# DEBUG
print("\n🔍 INFORMATIONS DE DEBUG")
print("-" * 80)
print(f"Méthode de récupération: {snapshot.debug.method}")
print(f"Status du parsing: {snapshot.debug.status}")
print(f"Complet: {'✓ OUI' if snapshot.is_complete() else '✗ NON'}")
if snapshot.debug.errors:
print(f"\n⚠️ Erreurs ({len(snapshot.debug.errors)}):")
for err in snapshot.debug.errors:
print(f"{err}")
if snapshot.debug.notes:
print(f"\n📝 Notes ({len(snapshot.debug.notes)}):")
for note in snapshot.debug.notes:
print(f"{note}")
if snapshot.debug.duration_ms:
print(f"\nDurée de récupération: {snapshot.debug.duration_ms}ms")
if snapshot.debug.html_size_bytes:
print(f"Taille HTML: {snapshot.debug.html_size_bytes:,} bytes")
# EXPORT JSON
print("\n" + "=" * 80)
print("EXPORT JSON")
print("=" * 80)
json_data = snapshot.to_dict()
json_str = json.dumps(json_data, indent=2, ensure_ascii=False)
# Sauvegarder
output_file = "scraped/backmarket_iphone15pro_detail.json"
with open(output_file, "w", encoding="utf-8") as f:
f.write(json_str)
print(f"✓ Détail complet sauvegardé: {output_file}")
print(f"Taille du JSON: {len(json_str):,} caractères")
# Afficher un extrait
lines = json_str.split('\n')
print(f"\nExtrait (30 premières lignes):")
print("-" * 80)
for line in lines[:30]:
print(line)
if len(lines) > 30:
print(f"... et {len(lines) - 30} lignes supplémentaires")
print("\n" + "=" * 80)
print("FIN DU RAPPORT")
print("=" * 80)