Paquete NPM: olostep
Comenzando
import Olostep from 'olostep';
const client = new Olostep({apiKey: process.env.OLOSTEP_API_KEY});
// Ejemplo mínimo de scraping
const result = await client.scrapes.create('https://example.com');
console.log(result.id, result.html_content);
El SDK de NodeJS acepta tanto camelCase como snake_case para todos los parámetros. Usa snake_case si estás desarrollando para agentes de IA, ya que coincide con los nombres de campo nativos de la API.
Uso
Scraping
Realiza scraping de una sola URL con varias opciones:
import Olostep, {Format} from 'olostep';
const client = new Olostep({apiKey: 'your_api_key'});
// Scraping simple
const scrape = await client.scrapes.create('https://example.com');
// Con múltiples formatos
const scrape = await client.scrapes.create({
url: 'https://example.com',
formats: [Format.HTML, Format.MARKDOWN, Format.TEXT],
waitBeforeScraping: 1000,
removeImages: true
});
// Accede al contenido
console.log(scrape.html_content);
console.log(scrape.markdown_content);
// Obtener scraping por ID
const fetched = await client.scrapes.get(scrape.id);
Procesamiento por lotes
Procesa múltiples URLs en un solo lote:
// Usando cadenas de URL (IDs personalizados generados automáticamente)
const batch = await client.batches.create([
'https://example.com',
'https://example.org',
'https://example.net'
]);
// O con IDs personalizados explícitos
const batch = await client.batches.create([
{url: 'https://example.com', customId: 'site-1'},
{url: 'https://example.org', customId: 'site-2'}
]);
console.log(`Lote ${batch.id} creado con ${batch.total_urls} URLs`);
// Esperar a que se complete
await batch.waitTillDone({
checkEveryNSecs: 5,
timeoutSeconds: 120
});
// Obtener información del lote
const info = await batch.info();
console.log(info);
// Transmitir resultados individuales
for await (const item of batch.items()) {
console.log(item.custom_id);
}
Crawling
Rastrea un sitio web completo:
const crawl = await client.crawls.create({
url: 'https://example.com',
maxPages: 100,
maxDepth: 3,
includeUrls: ['*/blog/*'],
excludeUrls: ['*/admin/*']
});
console.log(`Crawl ${crawl.id} iniciado`);
// Esperar a que se complete
await crawl.waitTillDone({
checkEveryNSecs: 10,
timeoutSeconds: 300
});
// Obtener información del crawl
const info = await crawl.info();
console.log(`Se rastrearon ${info.pages_crawled} páginas`);
// Transmitir páginas rastreadas
for await (const page of crawl.pages()) {
console.log(page.url, page.status_code);
}
Mapeo del sitio
Genera un mapa del sitio de URLs de un sitio web:
const map = await client.maps.create({
url: 'https://example.com',
topN: 100,
includeSubdomain: true,
searchQuery: 'blog posts'
});
console.log(`Mapa ${map.id} creado`);
// Transmitir URLs
for await (const url of map.urls()) {
console.log(url);
}
// Obtener información del mapa
const info = await map.info();
Respuestas impulsadas por IA
Obtén respuestas de páginas web usando IA:
import Olostep from 'olostep';
const client = new Olostep({apiKey: 'your_api_key'});
// Tarea simple: pasa una cadena directamente
const answer = await client.answers.create(
'What is the main topic of https://example.com?'
);
console.log(answer.answer);
console.log(answer.sources);
// Con salida JSON estructurada
const structured = await client.answers.create({
task: 'Extract all product names and prices from https://example.com',
jsonFormat: {
products: [{name: '', price: ''}]
}
});
console.log(structured.json_content);
// Recuperar una respuesta previamente creada por ID
const fetched = await client.answers.get(answer.id);
console.log(fetched.answer);
Recuperación de contenido
Recupera contenido previamente extraído:
// Obtener contenido en formato(s) específico(s)
const content = await client.retrieve(retrieveId, Format.MARKDOWN);
console.log(content.markdown_content);
// Múltiples formatos
const content = await client.retrieve(retrieveId, [
Format.HTML,
Format.MARKDOWN
]);
Opciones avanzadas
Acciones personalizadas
Realiza acciones del navegador antes de hacer scraping:
const scrape = await client.scrapes.create({
url: 'https://example.com',
actions: [
{type: 'wait', milliseconds: 2000},
{type: 'click', selector: '#load-more'},
{type: 'scroll', distance: 1000},
{type: 'fill_input', selector: '#search', value: 'query'}
]
});
Ubicación geográfica
Haz scraping desde diferentes países usando códigos de país predefinidos o cualquier cadena de código de país válida:
import Olostep, {Country} from 'olostep';
const client = new Olostep({apiKey: 'your_api_key'});
// Usando valores de enumeración predefinidos (US, DE, FR, GB, SG)
const scrape = await client.scrapes.create({
url: 'https://example.com',
country: Country.DE // Alemania
});
// O usa cualquier código de país válido como cadena
const scrape2 = await client.scrapes.create({
url: 'https://example.com',
country: 'jp' // Japón
});
Extrae datos estructurados usando LLMs:
const scrape = await client.scrapes.create({
url: 'https://example.com',
llmExtract: {
schema: {
title: 'string',
price: 'number',
description: 'string'
},
prompt: 'Extract product information from this page'
}
});
Configuración del cliente
import Olostep from 'olostep';
const client = new Olostep({
apiKey: 'your_api_key',
apiBaseUrl: 'https://api.olostep.com/v1', // opcional
timeoutMs: 150000, // 150 segundos (opcional)
retry: {
maxRetries: 3,
initialDelayMs: 1000
},
userAgent: 'MyApp/1.0' // opcional
});
Características destacadas
- Cliente orientado a async con soporte completo para TypeScript.
- Entradas seguras con TypeScript usando enums e interfaces (Formats, Countries, Actions, etc.).
- Espacios de nombres de recursos ricos con llamadas abreviadas (
client.scrapes.create()) y métodos explícitos (client.scrapes.get()).
- Capa de transporte compartida con reintentos, tiempos de espera y decodificación JSON.
- Jerarquía de errores completa