124 lines
3.4 KiB
Python
Executable File
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)
|