Saltar al contenido principal
A través del endpoint /v1/crawls de Olostep, puedes rastrear un sitio web y obtener el contenido de todas las páginas.
  • Rastrea un sitio web y obtiene el contenido de todas las subpáginas (o limita la profundidad del rastreo)
  • Usa patrones especiales para rastrear páginas específicas (por ejemplo, /blog/**)
  • Pasa un webhook_url para recibir notificaciones cuando el rastreo esté completo
  • Consulta de búsqueda para encontrar solo páginas específicas y ordenar por relevancia
Para detalles de la API, consulta la Referencia de la API del Endpoint de Rastreo.

Instalación

# pip install requests

import requests

Iniciar un rastreo

Proporciona la URL de inicio, incluye/excluye globs de URL, y max_pages. Opcional: max_depth, include_external, include_subdomain, search_query, top_n, webhook_url, timeout.
import time, json

API_URL = 'https://api.olostep.com'
API_KEY = '<YOUR_API_KEY>'
HEADERS = { 
    'Content-Type': 'application/json',
    'Authorization': f'Bearer {API_KEY}' 
}

data = {
  "start_url": "https://sugarbooandco.com",
  "max_pages": 100,
  "include_urls": ["/**"],
  "exclude_urls": ["/collections/**"],
  "include_external": False
}

res = requests.post(f"{API_URL}/v1/crawls", headers=HEADERS, json=data)
crawl = res.json()
print(json.dumps(crawl, indent=2))
Dado que todo en Olostep es un objeto, recibirás un objeto crawl en respuesta. El objeto crawl tiene algunas propiedades como id y status, que puedes usar para rastrear el progreso del rastreo.

Comprobar el estado del rastreo

Consulta el rastreo para seguir el progreso hasta que el status sea completed.
import time

def get_crawl_info(crawl_id):
    return requests.get(f'{API_URL}/v1/crawls/{crawl_id}', headers=HEADERS).json()

crawl_id = crawl['id']
while True:
    info = get_crawl_info(crawl_id)
    print(info['status'], info.get('pages_count'))
    if info['status'] == 'completed':
        break
    time.sleep(5)
Alternativamente, puedes pasar un webhook_url al iniciar el rastreo para ser notificado cuando el rastreo esté completo.

Listar páginas (paginación/stream con cursor)

Obtén páginas e itera usando cursor y limit. Funciona mientras el rastreo está in_progress o completed.
def get_pages(crawl_id, cursor=None, limit=10, search_query=None):
    params = { 
        'cursor': cursor, 
        'limit': limit
    }
    return requests.get(f'{API_URL}/v1/crawls/{crawl_id}/pages', headers=HEADERS, params=params).json()

cursor = 0
while True:
    page_batch = get_pages(crawl_id, cursor=cursor, limit=10)
    for page in page_batch['pages']:
        print(page['url'], page['retrieve_id'])
    if 'cursor' not in page_batch:
        break
    cursor = page_batch['cursor']
    time.sleep(5)

Consulta de búsqueda (limitar a los N más relevantes)

Usa search_query al inicio, y opcionalmente filtra la lista con search_query. Limita la exploración por página con top_n.
data = {
  "start_url": "https://sugarbooandco.com",
  "max_pages": 100,
  "include_urls": ["/**"],
  "search_query": "contact us",
  "top_n": 5
}
crawl = requests.post(f'{API_URL}/v1/crawls', headers=HEADERS, json=data).json()
pages = requests.get(f"{API_URL}/v1/crawls/{crawl['id']}/pages", headers=HEADERS, params={'search_query': 'contact us'}).json()
print(len(pages['pages']))

Recuperar contenido

Usa el retrieve_id de cada página con /v1/retrieve para obtener html_content y/o markdown_content.
def retrieve_content(retrieve_id):
    return requests.get(f"{API_URL}/v1/retrieve", headers=HEADERS, params={"retrieve_id": retrieve_id}).json()

for page in get_pages(crawl['id'], limit=5)['pages']:
    retrieved = retrieve_content(page['retrieve_id'])
    print(retrieved.get('markdown_content'))

Notas

  • La paginación se basa en cursor; repite solicitudes hasta que el cursor esté ausente.
  • Los campos de contenido en /v1/crawls/{crawl_id}/pages están obsoletos; prefiere /v1/retrieve.
  • Webhooks: establece webhook_url para recibir un POST cuando el rastreo se complete.

Precios

El rastreo cuesta 1 crédito por página rastreada.