Bibliothèque TypeScript utilisant des grands modèles de langage pour convertir n'importe quelle page web en données structurées
Présentation détaillée du projet LLM Scraper
Aperçu du projet
LLM Scraper est une bibliothèque TypeScript qui vous permet d'extraire des données structurées de n'importe quelle page web en utilisant des grands modèles de langage (LLM). Développé par mishushakov et hébergé sur GitHub, ce projet est une solution innovante pour l'extraction de données web.
Caractéristiques principales
Fonctionnalités principales
- Prise en charge de plusieurs LLM : Prend en charge les modèles locaux (Ollama, GGUF), OpenAI et les fournisseurs Vercel AI SDK.
- Sécurité des types : Utilise Zod pour définir les schémas, avec une sécurité des types TypeScript complète.
- Basé sur Playwright : Construit sur le puissant framework Playwright.
- Traitement en flux (streaming) : Prend en charge la transmission en flux d'objets.
- Génération de code : Nouvelle fonctionnalité de génération de code.
Prise en charge des formats de données
Le projet prend en charge 4 modes de formatage :
html
- Charge le HTML brut.markdown
- Charge au format markdown.text
- Charge le texte extrait (en utilisant Readability.js).image
- Charge une capture d'écran (uniquement multimodal).
Architecture technique
Principe de base
En interne, il utilise des appels de fonction pour convertir une page en données structurées. Cette approche exploite la capacité de compréhension des grands modèles de langage, permettant d'analyser et d'extraire intelligemment le contenu des pages web.
Pile technologique
- TypeScript - Fournit la sécurité des types et une bonne expérience de développement.
- Playwright - Automatisation web et acquisition de contenu.
- Zod - Validation de schéma et inférence de type.
- AI SDK - Intégration de plusieurs fournisseurs de LLM.
Installation et utilisation
Installation des dépendances
npm i zod playwright llm-scraper
Exemple d'initialisation de LLM
OpenAI
npm i @ai-sdk/openai
import { openai } from '@ai-sdk/openai'
const llm = openai.chat('gpt-4o')
Groq
npm i @ai-sdk/openai
import { createOpenAI } from '@ai-sdk/openai'
const groq = createOpenAI({
baseURL: 'https://api.groq.com/openai/v1',
apiKey: process.env.GROQ_API_KEY,
})
const llm = groq('llama3-8b-8192')
Ollama
npm i ollama-ai-provider
import { ollama } from 'ollama-ai-provider'
const llm = ollama('llama3')
GGUF
import { LlamaModel } from 'node-llama-cpp'
const llm = new LlamaModel({
modelPath: 'model.gguf'
})
Exemple d'utilisation de base
Création d'une instance de scraper
import LLMScraper from 'llm-scraper'
const scraper = new LLMScraper(llm)
Exemple d'extraction de données HackerNews
import { chromium } from 'playwright'
import { z } from 'zod'
import { openai } from '@ai-sdk/openai'
import LLMScraper from 'llm-scraper'
// Lancer une instance de navigateur
const browser = await chromium.launch()
// Initialiser le fournisseur LLM
const llm = openai.chat('gpt-4o')
// Créer un nouveau LLMScraper
const scraper = new LLMScraper(llm)
// Ouvrir une nouvelle page
const page = await browser.newPage()
await page.goto('https://news.ycombinator.com')
// Définir le schéma du contenu à extraire
const schema = z.object({
top: z
.array(
z.object({
title: z.string(),
points: z.number(),
by: z.string(),
commentsURL: z.string(),
})
)
.length(5)
.describe('Top 5 stories on Hacker News'),
})
// Exécuter le scraper
const { data } = await scraper.run(page, schema, {
format: 'html',
})
// Afficher les résultats du LLM
console.log(data.top)
await page.close()
await browser.close()
Fonctionnalités avancées
Traitement en flux (streaming)
Utiliser la fonction stream
à la place de run
permet d'obtenir un flux d'objets partiels (uniquement pour Vercel AI SDK) :
// Exécuter le scraper en mode flux
const { stream } = await scraper.stream(page, schema)
// Transmettre en flux les résultats du LLM
for await (const data of stream) {
console.log(data.top)
}
Génération de code
Utiliser la fonction generate
permet de générer un script Playwright réutilisable :
// Générer du code et l'exécuter sur la page
const { code } = await scraper.generate(page, schema)
const result = await page.evaluate(code)
const data = schema.parse(result)
// Afficher les résultats de l'analyse
console.log(data.news)
Cas d'utilisation
Domaines d'application
- Exploration de données (Data mining) : Extraire des informations structurées à partir de sites d'actualités, de forums, etc.
- Étude de marché : Collecter des informations sur les produits des concurrents.
- Agrégation de contenu : Automatiser la collecte et l'organisation de contenu.
- Systèmes de surveillance : Vérifier régulièrement les changements sur les sites web.
- Analyse de recherche : Collecte de données pour la recherche académique.
Avantages et caractéristiques
- Analyse intelligente : Utilise les LLM pour comprendre les structures de pages complexes.
- Sécurité des types : Prise en charge complète de TypeScript.
- Configuration flexible : Prend en charge plusieurs fournisseurs de LLM.
- Facile à intégrer : Conception d'API simple.
Conclusion
LLM Scraper est un outil innovant d'extraction de données web qui combine les techniques traditionnelles de web scraping avec les capacités modernes de l'IA. En exploitant la capacité de compréhension des grands modèles de langage, il est capable d'extraire des données structurées de manière plus intelligente et plus précise à partir de pages web complexes, offrant ainsi une nouvelle solution pour la collecte et l'analyse de données.