Home
Login

Bibliothèque TypeScript utilisant des grands modèles de langage pour convertir n'importe quelle page web en données structurées

MITTypeScript 5.0kmishushakov Last Updated: 2025-05-18

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.