Saltar al contenido principal
La integración de Olostep con LangChain proporciona herramientas completas para construir agentes de IA que pueden buscar, extraer, analizar y estructurar datos de cualquier sitio web. Perfecto para aplicaciones de LangChain y LangGraph.

Características

La integración proporciona acceso a las 5 capacidades de la API de Olostep:

Scrapes

Extrae contenido de cualquier URL única en múltiples formatos (Markdown, HTML, JSON, texto)

Batches

Procesa hasta 10,000 URLs en paralelo. Los trabajos por lotes se completan en 5-8 minutos

Answers

Búsqueda web impulsada por IA con consultas en lenguaje natural y salida estructurada

Maps

Extrae todas las URLs de un sitio web para análisis de estructura del sitio

Crawls

Descubre y extrae automáticamente sitios web completos siguiendo enlaces

Instalación

pip install langchain-olostep

Configuración

Configura tu clave de API de Olostep como una variable de entorno:
export OLOSTEP_API_KEY="your_olostep_api_key_here"
Obtén tu clave de API desde el Olostep Dashboard.

Herramientas Disponibles

scrape_website

Extrae contenido de una sola URL. Soporta múltiples formatos y renderizado de JavaScript.
url
string
requerido
URL del sitio web a extraer (debe incluir http:// o https://)
format
string
predeterminado:"markdown"
Formato de salida: markdown, html, json, o text
country
string
Código de país para contenido específico de ubicación (ej., “US”, “GB”, “CA”)
wait_before_scraping
integer
Tiempo de espera en milisegundos para el renderizado de JavaScript (0-10000)
parser
string
ID de parser opcional para extracción especializada (ej., “@olostep/amazon-product”)
from langchain_olostep import scrape_website
import asyncio

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

print(content)

scrape_batch

Procesa múltiples URLs en paralelo (hasta 10,000 a la vez).
urls
array
requerido
Lista de URLs a extraer
format
string
predeterminado:"markdown"
Formato de salida para todas las URLs: markdown, html, json, o text
country
string
Código de país para contenido específico de ubicación
wait_before_scraping
integer
Tiempo de espera en milisegundos para el renderizado de JavaScript
parser
string
ID de parser opcional para extracción especializada
from langchain_olostep import scrape_batch
import asyncio

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

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

answer_question

Busca en la web y obtén respuestas impulsadas por IA con fuentes. Perfecto para enriquecimiento de datos e investigación.
task
string
requerido
Pregunta o tarea a buscar
json_schema
object
Diccionario/cadena de esquema JSON opcional que describe el formato de salida deseado
from langchain_olostep import answer_question
import asyncio

# Hacer una pregunta simple
result = asyncio.run(answer_question.ainvoke({
    "task": "What is the capital of France?"
}))

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

extract_urls

Extrae todas las URLs de un sitio web para análisis de estructura del sitio.
url
string
requerido
URL del sitio web para extraer URLs
search_query
string
Consulta de búsqueda opcional para filtrar URLs
top_n
integer
Limitar el número de URLs devueltas
include_urls
array
Patrones glob para incluir (ej., [“/blog/**”])
exclude_urls
array
Patrones glob para excluir (ej., [“/admin/**”])
from langchain_olostep import extract_urls
import asyncio

# Obtener todas las URLs de un sitio web
result = asyncio.run(extract_urls.ainvoke({
    "url": "https://example.com",
    "top_n": 100
}))

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

crawl_website

Descubre y extrae automáticamente sitios web completos siguiendo enlaces.
start_url
string
requerido
URL de inicio para el rastreo
max_pages
integer
predeterminado:"100"
Número máximo de páginas a rastrear
include_urls
array
Patrones glob para incluir (ej., [”/**”] para todos)
exclude_urls
array
Patrones glob para excluir (ej., [“/admin/**”])
max_depth
integer
Profundidad máxima para rastrear desde start_url
include_external
boolean
predeterminado:"false"
Incluir URLs externas
from langchain_olostep import crawl_website
import asyncio

# Rastrear todo el sitio de documentación
result = asyncio.run(crawl_website.ainvoke({
    "start_url": "https://docs.example.com",
    "max_pages": 100
}))

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

Integración de Agente LangChain

Construye agentes inteligentes que pueden buscar y extraer de la web:
from langchain.agents import initialize_agent, AgentType
from langchain_openai import ChatOpenAI
from langchain_olostep import (
    scrape_website,
    answer_question,
    extract_urls
)

# Crear agente con herramientas de 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
)

# Usar el agente
result = agent.run("""
Research the company at https://company.com:
1. Scrape their about page
2. Search for their latest funding round
3. Extract all their product pages
""")

print(result)

Integración de LangGraph

Construye flujos de trabajo complejos de múltiples pasos con 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):
        # Extraer todas las URLs del sitio objetivo
        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):
        # Extraer páginas descubiertas en lote
        result = scrape_batch.invoke({
            "urls": state["urls"],
            "format": "markdown"
        })
        state["batch_id"] = json.loads(result)["batch_id"]
        return state
    
    def answer_questions(state):
        # Usar IA para responder preguntas sobre los datos
        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()

# Usar el agente
agent = create_research_agent()
result = agent.invoke({
    "target_url": "https://store.com",
    "research_question": "What are the top 5 most expensive products?",
    "desired_format": {
        "products": [{"name": "", "price": "", "url": ""}]
    }
})

Casos de Uso Avanzados

Enriquecimiento de Datos

Enriquece datos de hojas de cálculo con información web:
from langchain_olostep import answer_question

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

for company in companies:
    result = answer_question.invoke({
        "task": f"Find information about {company}",
        "json_schema": {
            "ceo": "",
            "headquarters": "",
            "employee_count": "",
            "latest_funding": ""
        }
    })
    print(f"{company}: {result}")

Extracción de Productos de E-commerce

Extrae datos de productos con parsers especializados:
from langchain_olostep import scrape_website

# Extraer producto de Amazon
result = scrape_website.invoke({
    "url": "https://www.amazon.com/dp/PRODUCT_ID",
    "parser": "@olostep/amazon-product",
    "format": "json"
})
# Devuelve datos estructurados del producto: precio, título, calificación, etc.

Auditoría SEO

Analiza sitios web completos para SEO:
from langchain_olostep import extract_urls, scrape_batch
import json

# 1. Descubrir todas las páginas
urls_result = extract_urls.invoke({
    "url": "https://yoursite.com",
    "top_n": 1000
})

# 2. Extraer todas las páginas
urls = json.loads(urls_result)["urls"]
batch_result = scrape_batch.invoke({
    "urls": urls,
    "format": "html"
})

Extracción de Documentación

Rastrea y extrae documentación:
from langchain_olostep import crawl_website

# Rastrear todo el sitio de documentación
result = crawl_website.invoke({
    "start_url": "https://docs.example.com",
    "max_pages": 500,
    "include_urls": ["/docs/**"],
    "exclude_urls": ["/api/**", "/v1/**"]
})

Parsers Especializados

Olostep proporciona parsers preconstruidos para sitios web populares:
  • @olostep/google-search - Resultados de búsqueda de Google
Úsalos con el parámetro parser:
scrape_website.invoke({
    "url": "https://www.google.com/search?q=alexander+the+great&gl=us&hl=en",
    "parser": "@olostep/google-search"
})

Manejo de Errores

from langchain_core.exceptions import LangChainException

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

Mejores Prácticas

Cuando extraigas más de 3-5 URLs, usa scrape_batch en lugar de múltiples llamadas a scrape_website. El procesamiento por lotes es mucho más rápido y rentable.
Para sitios con mucho JavaScript, usa el parámetro wait_before_scraping (2000-5000ms es típico). Esto asegura que el contenido dinámico esté completamente cargado.
Para sitios web populares (Amazon, LinkedIn, Google), usa nuestros parsers preconstruidos para obtener datos estructurados automáticamente.
Al usar extract_urls o crawl_website, usa patrones glob para enfocarte en páginas relevantes y evitar procesamiento innecesario.
Implementa retroceso exponencial para errores de límite de tasa. La API maneja automáticamente la mayoría de los límites de tasa internamente.

Soporte

Recursos Relacionados

Scrapes API

Aprende sobre el endpoint de Scrapes

Batches API

Aprende sobre el endpoint de Batches

Answers API

Aprende sobre el endpoint de Answers

Maps API

Aprende sobre el endpoint de Maps

Crawls API

Aprende sobre el endpoint de Crawls

Python SDK

Explora el SDK de Python

LangChain Website

Plataforma LangChain