Passer au contenu principal
L’intégration Olostep LangChain fournit des outils complets pour construire des agents IA capables de rechercher, scraper, analyser et structurer des données à partir de n’importe quel site web. Parfait pour les applications LangChain et LangGraph.

Fonctionnalités

L’intégration donne accès aux 5 capacités de l’API Olostep :

Scrapes

Extraire le contenu de n’importe quelle URL unique dans plusieurs formats (Markdown, HTML, JSON, texte)

Batches

Traiter jusqu’à 10 000 URLs en parallèle. Les tâches par lot se terminent en 5-8 minutes

Answers

Recherche web alimentée par l’IA avec des requêtes en langage naturel et un résultat structuré

Maps

Extraire toutes les URLs d’un site web pour l’analyse de la structure du site

Crawls

Découvrir et scraper de manière autonome des sites web entiers en suivant les liens

Installation

pip install langchain-olostep

Configuration

Définis ta clé API Olostep comme une variable d’environnement :
export OLOSTEP_API_KEY="your_olostep_api_key_here"
Récupère ta clé API depuis le Tableau de bord Olostep.

Outils Disponibles

scrape_website

Extraire le contenu d’une URL unique. Prend en charge plusieurs formats et le rendu JavaScript.
url
string
requis
URL du site web à scraper (doit inclure http:// ou https://)
format
string
défaut:"markdown"
Format de sortie : markdown, html, json, ou text
country
string
Code du pays pour le contenu spécifique à la localisation (par ex., “US”, “GB”, “CA”)
wait_before_scraping
integer
Temps d’attente en millisecondes pour le rendu JavaScript (0-10000)
parser
string
ID de parser optionnel pour l’extraction spécialisée (par ex., “@olostep/amazon-product”)
from langchain_olostep import scrape_website
import asyncio

# Scraper un site web
content = asyncio.run(scrape_website.ainvoke({
    "url": "https://example.com",
    "format": "markdown"
}))

print(content)

scrape_batch

Traiter plusieurs URLs en parallèle (jusqu’à 10 000 à la fois).
urls
array
requis
Liste des URLs à scraper
format
string
défaut:"markdown"
Format de sortie pour toutes les URLs : markdown, html, json, ou text
country
string
Code du pays pour le contenu spécifique à la localisation
wait_before_scraping
integer
Temps d’attente en millisecondes pour le rendu JavaScript
parser
string
ID de parser optionnel pour l’extraction spécialisée
from langchain_olostep import scrape_batch
import asyncio

# Scraper plusieurs URLs
result = asyncio.run(scrape_batch.ainvoke({
    "urls": [
        "https://example1.com",
        "https://example2.com",
        "https://example3.com"
    ],
    "format": "markdown"
}))

print(result)
# Renvoie : {"batch_id": "batch_xxx", "status": "in_progress", ...}

answer_question

Rechercher sur le web et obtenir des réponses alimentées par l’IA avec des sources. Parfait pour l’enrichissement de données et la recherche.
task
string
requis
Question ou tâche à rechercher
json_schema
object
Dictionnaire/chaîne JSON optionnel décrivant le format de sortie souhaité
from langchain_olostep import answer_question
import asyncio

# Poser une question simple
result = asyncio.run(answer_question.ainvoke({
    "task": "Quelle est la capitale de la France ?"
}))

print(result)
# Renvoie : {"answer": {"result": "Paris"}, "sources": [...]}

extract_urls

Extraire toutes les URLs d’un site web pour l’analyse de la structure du site.
url
string
requis
URL du site web pour extraire les URLs
search_query
string
Requête de recherche optionnelle pour filtrer les URLs
top_n
integer
Limiter le nombre d’URLs retournées
include_urls
array
Modèles globaux à inclure (par ex., [“/blog/**”])
exclude_urls
array
Modèles globaux à exclure (par ex., [“/admin/**”])
from langchain_olostep import extract_urls
import asyncio

# Obtenir toutes les URLs d'un site web
result = asyncio.run(extract_urls.ainvoke({
    "url": "https://example.com",
    "top_n": 100
}))

print(result)
# Renvoie : {"urls": [...], "total_urls": 100, ...}

crawl_website

Découvrir et scraper de manière autonome des sites web entiers en suivant les liens.
start_url
string
requis
URL de départ pour le crawl
max_pages
integer
défaut:"100"
Nombre maximum de pages à crawler
include_urls
array
Modèles globaux à inclure (par ex., [”/**”] pour tout)
exclude_urls
array
Modèles globaux à exclure (par ex., [“/admin/**”])
max_depth
integer
Profondeur maximale à crawler depuis start_url
include_external
boolean
défaut:"false"
Inclure les URLs externes
from langchain_olostep import crawl_website
import asyncio

# Crawler l'ensemble du site de documentation
result = asyncio.run(crawl_website.ainvoke({
    "start_url": "https://docs.example.com",
    "max_pages": 100
}))

print(result)
# Renvoie : {"crawl_id": "crawl_xxx", "status": "in_progress", ...}

Intégration de l’Agent LangChain

Construisez des agents intelligents capables de rechercher et scraper le web :
from langchain.agents import initialize_agent, AgentType
from langchain_openai import ChatOpenAI
from langchain_olostep import (
    scrape_website,
    answer_question,
    extract_urls
)

# Créer un agent avec les outils Olostep
tools = [scrape_website, answer_question, extract_urls]
llm = ChatOpenAI(model="gpt-4o-mini")

agent = initialize_agent(
    tools=tools,
    llm=llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)

# Utiliser l'agent
result = agent.run("""
Recherche l'entreprise sur https://company.com :
1. Scraper leur page à propos
2. Rechercher leur dernier tour de financement
3. Extraire toutes leurs pages produits
""")

print(result)

Intégration LangGraph

Construisez des workflows complexes en plusieurs étapes avec LangGraph :
from langgraph.graph import StateGraph, END
from langchain_olostep import (
    scrape_website,
    scrape_batch,
    answer_question,
    extract_urls
)
from langchain_openai import ChatOpenAI
import json

def create_research_agent():
    workflow = StateGraph(dict)
    
    def discover_pages(state):
        # Extraire toutes les URLs du site cible
        result = extract_urls.invoke({
            "url": state["target_url"],
            "include_urls": ["/product/**"],
            "top_n": 50
        })
        state["urls"] = json.loads(result)["urls"]
        return state
    
    def scrape_pages(state):
        # Scraper les pages découvertes en lot
        result = scrape_batch.invoke({
            "urls": state["urls"],
            "format": "markdown"
        })
        state["batch_id"] = json.loads(result)["batch_id"]
        return state
    
    def answer_questions(state):
        # Utiliser l'IA pour répondre aux questions sur les données
        result = answer_question.invoke({
            "task": state["research_question"],
            "json_schema": state["desired_format"]
        })
        state["answer"] = json.loads(result)["answer"]
        return state
    
    workflow.add_node("discover", discover_pages)
    workflow.add_node("scrape", scrape_pages)
    workflow.add_node("analyze", answer_questions)
    
    workflow.set_entry_point("discover")
    workflow.add_edge("discover", "scrape")
    workflow.add_edge("scrape", "analyze")
    workflow.add_edge("analyze", END)
    
    return workflow.compile()

# Utiliser l'agent
agent = create_research_agent()
result = agent.invoke({
    "target_url": "https://store.com",
    "research_question": "Quels sont les 5 produits les plus chers ?",
    "desired_format": {
        "products": [{"name": "", "price": "", "url": ""}]
    }
})

Cas d’Utilisation Avancés

Enrichissement de Données

Enrichir les données de feuille de calcul avec des informations web :
from langchain_olostep import answer_question

companies = ["Stripe", "Shopify", "Square"]

for company in companies:
    result = answer_question.invoke({
        "task": f"Trouver des informations sur {company}",
        "json_schema": {
            "ceo": "",
            "headquarters": "",
            "employee_count": "",
            "latest_funding": ""
        }
    })
    print(f"{company}: {result}")

Scraping de Produits E-commerce

Scraper les données de produits avec des parsers spécialisés :
from langchain_olostep import scrape_website

# Scraper un produit Amazon
result = scrape_website.invoke({
    "url": "https://www.amazon.com/dp/PRODUCT_ID",
    "parser": "@olostep/amazon-product",
    "format": "json"
})
# Renvoie des données de produit structurées : prix, titre, évaluation, etc.

Audit SEO

Analyser des sites web entiers pour le SEO :
from langchain_olostep import extract_urls, scrape_batch
import json

# 1. Découvrir toutes les pages
urls_result = extract_urls.invoke({
    "url": "https://yoursite.com",
    "top_n": 1000
})

# 2. Scraper toutes les pages
urls = json.loads(urls_result)["urls"]
batch_result = scrape_batch.invoke({
    "urls": urls,
    "format": "html"
})

Scraping de Documentation

Crawler et extraire la documentation :
from langchain_olostep import crawl_website

# Crawler l'ensemble du site de docs
result = crawl_website.invoke({
    "start_url": "https://docs.example.com",
    "max_pages": 500,
    "include_urls": ["/docs/**"],
    "exclude_urls": ["/api/**", "/v1/**"]
})

Parsers Spécialisés

Olostep fournit des parsers pré-construits pour les sites populaires :
  • @olostep/google-search - Résultats de recherche Google
Utilisez-les avec le paramètre parser :
scrape_website.invoke({
    "url": "https://www.google.com/search?q=alexander+the+great&gl=us&hl=en",
    "parser": "@olostep/google-search"
})

Gestion des Erreurs

from langchain_core.exceptions import LangChainException

try:
    result = await scrape_website.ainvoke({
        "url": "https://example.com"
    })
except LangChainException as e:
    print(f"Échec du scraping : {e}")

Bonnes Pratiques

Lorsque tu scrapes plus de 3-5 URLs, utilise scrape_batch au lieu de multiples appels scrape_website. Le traitement par lots est beaucoup plus rapide et plus rentable.
Pour les sites riches en JavaScript, utilise le paramètre wait_before_scraping (2000-5000ms est typique). Cela garantit que le contenu dynamique est entièrement chargé.
Pour les sites populaires (Amazon, LinkedIn, Google), utilise nos parsers pré-construits pour obtenir automatiquement des données structurées.
Lorsque tu utilises extract_urls ou crawl_website, utilise des modèles globaux pour te concentrer sur les pages pertinentes et éviter un traitement inutile.
Implémente un backoff exponentiel pour les erreurs de limite de taux. L’API gère automatiquement la plupart des limitations de taux en interne.

Support

Ressources Connexes

Scrapes API

En savoir plus sur l’endpoint Scrapes

Batches API

En savoir plus sur l’endpoint Batches

Answers API

En savoir plus sur l’endpoint Answers

Maps API

En savoir plus sur l’endpoint Maps

Crawls API

En savoir plus sur l’endpoint Crawls

Python SDK

Explorer le SDK Python

LangChain Website

Plateforme LangChain