Publié le Tue Mar 26 2024 00:00:00 GMT+0000 (Coordinated Universal Time) par Web'Indé
WEB SCRAPING POUR LLM : Extraire le Contenu Pertinent d’un Site Web
Pourquoi Scraper pour les LLMs ?
Les LLMs ont besoin de données de qualité pour être vraiment utiles. Le web regorge d’informations précieuses, mais il faut savoir les extraire et les formater correctement.
🎯 Objectifs du Scraping LLM-Ready
-
Extraction Intelligente
- Contenu textuel pertinent
- Structure hiérarchique
- Métadonnées importantes
-
Nettoyage Automatisé
- Suppression du bruit
- Formatage uniforme
- Conservation du contexte
-
Préparation pour LLM
- Format optimisé
- Chunks adaptés
- Relations préservées
Outils Nécessaires
🛠️ Stack Technique Recommandée
-
Python Essentials
pip install beautifulsoup4 selenium requests trafilatura -
Outils Spécialisés
pip install newspaper3k readability-lxml html2text -
Gestion des Données
pip install pandas numpy
Processus d’Extraction
1. Analyse Initiale du Site
from trafilatura import fetch_url, extract
# Récupération et extraction du contenu
url = "https://example.com"
downloaded = fetch_url(url)
text = extract(downloaded)
2. Extraction Structurée
from bs4 import BeautifulSoup
import requests
def extract_content(url):
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
# Extraction du contenu principal
content = soup.find('main') or soup.find('article')
# Nettoyage
[tag.decompose() for tag in content.find_all(['script', 'style'])]
return content.get_text()
3. Nettoyage et Formatage
def clean_text(text):
# Suppression des espaces multiples
text = ' '.join(text.split())
# Normalisation des sauts de ligne
text = text.replace('\n\n\n', '\n\n')
# Suppression des caractères spéciaux
text = re.sub(r'[^\w\s.,!?-]', '', text)
return text
Préparation pour les LLMs
1. Chunking Intelligent
def create_chunks(text, max_length=1000):
sentences = text.split('.')
chunks = []
current_chunk = ""
for sentence in sentences:
if len(current_chunk) + len(sentence) < max_length:
current_chunk += sentence + "."
else:
chunks.append(current_chunk)
current_chunk = sentence + "."
return chunks
2. Métadonnées et Structure
def extract_metadata(soup):
metadata = {
'title': soup.title.string if soup.title else None,
'description': soup.find('meta', {'name': 'description'})['content'],
'author': soup.find('meta', {'name': 'author'})['content'],
'date': soup.find('meta', {'name': 'date'})['content']
}
return metadata
Automatisation du Processus
🤖 Script Complet
import trafilatura
from bs4 import BeautifulSoup
import requests
import json
class WebScraper:
def __init__(self):
self.config = self.load_config()
def scrape_site(self, url):
# Extraction
content = self.extract_content(url)
# Nettoyage
clean_content = self.clean_text(content)
# Chunking
chunks = self.create_chunks(clean_content)
# Formatage final
return self.format_for_llm(chunks)
Bonnes Pratiques et Optimisations
🎯 Pour un Scraping Efficace
-
Respect des Robots.txt
from urllib.robotparser import RobotFileParser def check_robots(url): rp = RobotFileParser() rp.set_url(f"{url}/robots.txt") rp.read() return rp.can_fetch("*", url) -
Gestion des Erreurs
def safe_scrape(url): try: return scrape_content(url) except Exception as e: logging.error(f"Erreur pour {url}: {e}") return None -
Rate Limiting
from time import sleep def rate_limited_scrape(urls, delay=1): for url in urls: yield scrape_content(url) sleep(delay)
Cas d’Usage Spécifiques
1. Documentation Technique
def scrape_docs(url):
# Configuration spéciale pour la doc
config = {
'code_blocks': True,
'preserve_formatting': True,
'include_headers': True
}
return scrape_with_config(url, config)
2. Articles de Blog
def scrape_blog(url):
# Configuration pour blog
config = {
'extract_date': True,
'get_categories': True,
'include_comments': False
}
return scrape_with_config(url, config)
Considérations Éthiques
🔒 Respect et Responsabilité
-
Vérifications Préalables
- Terms of Service
- Robots.txt
- Rate limiting
-
Protection des Données
- Données personnelles
- Contenu sensible
- Droits d’auteur
Pour Aller Plus Loin
📚 Ressources et Outils
🔄 Intégration avec les LLMs
Note : Assure-toi toujours de respecter les conditions d’utilisation des sites que tu scrapes et d’implémenter des délais appropriés entre les requêtes.
Écrit par Web'Indé
← Retour