Files
OnePieceDle/SCRAPER.md
whidix 6f7bae2307 feat(scraper): implement One Piece data scraper for devil fruits and characters
- Added a new script to scrape devil fruits and characters from One Piece fandom.
- Implemented functions to fetch, normalize, and save data in JSON, CSV, and SQL formats.
- Created a structured output directory for scraped data.

feat(database): update schema for devil fruits and characters

- Defined new types for devil fruits and haki in the database schema.
- Updated the character table to include fields for age, affiliations, devil fruit, haki, bounty, height, origin, first appearance, and picture URL.

feat(ui): enhance main page and daily mode layout

- Redesigned the main page with a new layout and styling for the OnePieceDle game.
- Created a new daily mode page with sections for clues and user input for guesses.
- Removed demo authentication routes and pages to streamline the application.
2026-02-27 01:14:44 +01:00

4.1 KiB

One Piece Scraper

Script pour scraper les données des personnages de One Piece depuis le fandom wiki français.

Installation

Installe les dépendances d'abord :

npm install

Utilisation

# Scraper tous les formats (JSON, CSV, SQL)
npm run scrape

# Ou spécifier un format
node scripts/scrape-onepiece.js json    # JSON uniquement
node scripts/scrape-onepiece.js csv     # CSV uniquement
node scripts/scrape-onepiece.js sql     # SQL uniquement
node scripts/scrape-onepiece.js all     # Tous les formats (défaut)

Sortie

Les données seront sauvegardées dans le dossier scraped-data/ :

  • characters.json - Format JSON avec toutes les données structurées
  • characters.csv - Format CSV pour importer dans Excel/Sheets
  • characters.sql - Statements SQL avec gestion des conflits (upsert)

Données extraites

Pour chaque personnage :

  • 📝 Nom - Nom du personnage
  • 👤 Genre - Masculin/Féminin (extrait des catégories)
  • 🎂 Âge - Âge le plus récent (post-ellipse), chiffres uniquement
  • 📏 Taille - Normalisée en mètres (format: "2.74" ou "174" pour cm)
  • 🌍 Origine - Lieu d'origine (sans parenthèses)
  • 😈 Fruit du Démon - Nom du fruit (si applicable)
  • 👥 Affiliations - Liste des affiliations (équipages, organisations)
  • 💰 Prime - Bounty la plus récente
  • Haki - Liste des types de Haki (Observation, Armament, Conqueror)
  • 📖 Première Apparition - Numéro de chapitre
  • 🖼️ Image - URL de l'image portrait nettoyée
  • 🔗 Fandom URL - Lien vers la page wiki

Personnages scrapés

Le script scrape tous les personnages canon de la liste officielle du Fandom wiki français.

Personnages actuellement filtrés : Luffy et Moria (modifiable dans fetchAllCharactersUrl)

Pour scraper tous les personnages, retire le filtre dans la fonction fetchAllCharactersUrl.

Fonctionnalités avancées

Requêtes parallèles

  • Le scraper traite 5 personnages en parallèle pour plus d'efficacité
  • Concurrency configurable dans le code

Nettoyage des données

  • Suppression automatique des citations/références (<sup> tags)
  • Âge : extraction du dernier âge (après ellipse), sans parenthèses
  • Taille : normalisation m/cm et suppression des parenthèses
  • Origine : suppression du contenu entre parenthèses
  • Image : sélection automatique du portrait
  • Première apparition : extraction du numéro de chapitre uniquement

SQL Upsert

  • Le SQL généré utilise INSERT ... ON CONFLICT(name) DO UPDATE
  • Met à jour les personnages existants au lieu de créer des doublons
  • Compatible SQLite (utilisé par le projet)

Formats de données

  • Haki : Stocké comme array JSON dans SQL : ["Observation","Armament"]
  • Affiliations : Liste dans JSON, comma-separated dans CSV/SQL
  • Tous les champs nullable supportent NULL dans SQL

Configuration

Modifier les personnages filtrés

Dans scripts/scrape-onepiece.js, fonction fetchAllCharactersUrl :

// Filtrer pour des personnages spécifiques
if (nameLower.includes('luffy') || nameLower.includes('moria')) {
    characters.push({ name: charName, url: charLink });
}

Ajuster la concurrence

Dans la fonction main :

const concurrency = 5; // Nombre de requêtes simultanées

Importer les données SQL

Après avoir généré le fichier SQL, importe-le dans la base de données :

npm run db:import

Ce script :

  • Lit automatiquement scraped-data/characters.sql
  • Exécute chaque statement individuellement
  • Affiche une barre de progression
  • Gère les erreurs sans bloquer l'import complet
  • Utilise le upsert pour éviter les doublons

Note : Assure-toi d'avoir exécuté les migrations avant l'import :

npm run db:migrate

Notes techniques

  • Source : https://onepiece.fandom.com/fr/wiki
  • Parseur : Cheerio (DOM parsing)
  • Traitement parallèle avec Promise.all
  • User-Agent configuré pour éviter les blocages
  • Pas de délai entre requêtes (batches parallèles)
  • Gestion d'erreurs par personnage (ne bloque pas le scraping complet)