Un outil puissant pour crawler et extraire le contenu des sites de documentation technique, avec conversion automatique en Markdown.
- Présentation
- Fonctionnalités
- Installation
- Utilisation
- Configuration
- Architecture
- Stratégies de Crawling
- Build et Distribution
- Exemples
- Contribution
- Licence
Documentation Crawler est un outil conçu pour extraire et sauvegarder le contenu des sites de documentation technique. Il permet de créer une copie locale de la documentation, à la fois en HTML et en Markdown, facilitant ainsi la consultation hors ligne et l'intégration dans d'autres systèmes.
Le crawler utilise différentes stratégies en fonction du type de site à crawler, avec des mécanismes de fallback pour garantir la récupération du contenu même dans des conditions difficiles.
- Crawling multi-stratégies : Utilise différentes approches selon le type de site
- Conversion HTML → Markdown : Transforme automatiquement le contenu HTML en Markdown
- Sauvegarde double format : Enregistre à la fois en HTML et en Markdown
- Fusion des pages : Option pour fusionner toutes les pages crawlées dans un seul fichier
- Gestion de la profondeur : Contrôle la profondeur de crawling
- Support GitHub : Crawling spécifique pour les repositories GitHub
- Gestion des sites JavaScript : Support des sites générés dynamiquement via Chromium/Puppeteer
- Interface CLI : Utilisation simple en ligne de commande
- Node.js (v14 ou supérieur)
- npm ou yarn
# Cloner le repository
git clone https://github.com/votre-username/documentation-crawler.git
cd documentation-crawler
# Installer les dépendances
npm install
# Compiler le projet
npm run build
# Créer un package tarball
npm pack
# Installer globalement
npm install -g crawler-docs-1.0.x.tgz
npm install -g crawler-docs
Après installation globale, vous pouvez utiliser la commande crawler
:
# Format de base
crawler <url> [output-dir] [--merge]
# Exemple standard (un fichier par page)
crawler https://docs.nestjs.com/ ./output
# Exemple avec fusion des pages dans un seul fichier
crawler https://docs.nestjs.com/ ./output --merge
Option | Description |
---|---|
--merge |
Fusionne toutes les pages crawlées dans un seul fichier HTML et un seul fichier Markdown |
Si vous travaillez directement avec le code source sans installation globale :
# Utiliser npm start
npm start <url> [output-dir]
# Exemple
npm start https://docs.nestjs.com/ ./output
import { crawlSite } from './dist/main';
// Configuration du site à crawler
const siteConfig = {
title: 'NestJS Documentation',
startUrl: 'https://docs.nestjs.com/',
maxDepth: 3,
mergeOutput: true // Activer la fusion des pages dans un seul fichier
};
// Lancer le crawling
crawlSite(siteConfig, './output')
.then(() => console.log('Crawling terminé !'))
.catch(err => console.error('Erreur:', err));
Le crawler peut être configuré via un fichier config.json
à la racine du projet :
{
"docs": [
{
"title": "NestJS Documentation",
"startUrl": "https://docs.nestjs.com/",
"maxDepth": 3,
"mergeOutput": true
}
],
"useChromiumForDocsCrawling": false
}
Option | Description | Valeur par défaut |
---|---|---|
docs |
Liste des sites à crawler | [] |
useChromiumForDocsCrawling |
Utiliser Chromium pour le crawling | false |
maxDepth |
Profondeur maximale de crawling | 3 |
maxRequestsPerCrawl |
Nombre maximum de requêtes par crawl | 100 |
mergeOutput |
Fusionner toutes les pages dans un seul fichier | false |
Le projet est structuré autour de plusieurs composants clés :
- DocsCrawler : Orchestrateur principal qui sélectionne la stratégie appropriée
-
Stratégies de crawling :
- CheerioCrawler : Crawler léger basé sur Cheerio pour les sites statiques
- ChromiumCrawler : Utilise Puppeteer pour les sites JavaScript
- GitHubCrawler : Spécialisé pour les repositories GitHub
- DefaultCrawler : Utilise un service externe pour le crawling
Utilise Cheerio pour parser le HTML statique. C'est la stratégie la plus rapide et la plus légère, adaptée aux sites de documentation simples.
Utilise Puppeteer et Chromium pour rendre les pages JavaScript. Cette stratégie est plus lente mais permet de crawler des sites avec du contenu généré dynamiquement.
Spécialisé pour les repositories GitHub, utilise l'API GitHub pour récupérer le contenu des fichiers Markdown.
Utilise un service externe pour le crawling, servant de fallback lorsque les autres stratégies échouent.
Ce projet utilise esbuild pour créer un bundle JavaScript à partir du code TypeScript, et npm pour la distribution.
-
esbuild.config.mjs
: Configuration d'esbuild (format ESM) -
package.json
: Configuration du package avec"type": "module"
-
index.cjs
: Fichier bundle généré (format CommonJS)
Le processus de build utilise esbuild pour créer un bundle unique qui inclut toutes les dépendances nécessaires, à l'exception des modules natifs qui sont marqués comme externes. Cette approche permet d'avoir un exécutable unique et portable.
# Construire le projet
npm run build
# Créer un package tarball
npm pack
# Installer globalement
npm install -g crawler-docs-1.0.x.tgz
crawler https://docs.nestjs.com/ ./output
crawler https://github.com/nestjs/nest ./output
Le crawler convertit automatiquement le contenu HTML en Markdown et enregistre les deux formats :
crawler https://www.moritzjung.dev/obsidian-meta-bind-plugin-docs ./output
Utilisez l'option --merge
pour fusionner toutes les pages crawlées dans un seul fichier HTML et un seul fichier Markdown :
crawler https://docs.nestjs.com/ ./output --merge
Cela génèrera deux fichiers dans le répertoire de sortie :
-
./output/docs.nestjs.com/merged.html
(version HTML) -
./output/docs.nestjs.com/merged.md
(version Markdown)
Les fichiers fusionnés incluent une table des matières avec des liens vers chaque page, facilitant la navigation.
Les contributions sont les bienvenues ! N'hésitez pas à ouvrir une issue ou une pull request.
- Forkez le projet
- Créez votre branche de fonctionnalité (
git checkout -b feature/amazing-feature
) - Committez vos changements (
git commit -m 'Add some amazing feature'
) - Poussez vers la branche (
git push origin feature/amazing-feature
) - Ouvrez une Pull Request
Ce projet est sous licence MIT. Voir le fichier LICENSE
pour plus de détails.