r/LocalLLaMA 2026 tiene hilos regulares sobre cómo emparejar modelos locales sin censura (Dolphin, Wizard, Nous) con un backend de raspado alojado en la nube. La división es deliberada: el LLM se ejecuta localmente para brindar privacidad y flexibilidad, Scavio maneja la infraestructura de raspado duro. Este tutorial construye esa arquitectura.
Requisitos previos
- Ollama o llama.cpp
- Un modelo local sin censura (dolphin-mixtral, nous-hermes)
- Una clave API de Scavio
- Python 3.10+
Guia paso a paso
Paso 1: Ejecute el LLM local
Ollama da esta orden.
ollama run dolphin-mixtralPaso 2: Llame a Scavio para la capa raspadora
Scavio se encarga del lado de la red/anti-bot.
import requests, os
API_KEY = os.environ['SCAVIO_API_KEY']
def fetch(url):
r = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'query': url, 'platform': 'extract', 'render_js': True})
return r.json().get('html', '')Paso 3: Deje que el LLM local haga la extracción
No hay filtros de contenido en el mensaje de extracción.
import requests
def extract_with_local(html, instruction):
r = requests.post('http://localhost:11434/api/generate',
json={'model': 'dolphin-mixtral', 'prompt': f'{instruction}\n\nHTML:\n{html[:4000]}'})
return r.json()['response']Paso 4: Cablear toda la tubería
Obtener a través de Scavio, extraer a través de LLM local.
def scrape(url, instruction):
html = fetch(url)
return extract_with_local(html, instruction)
print(scrape('https://target.com', 'Extract all product names and prices as JSON.'))Paso 5: Validar salida
Verifique el esquema de luz antes de guardar.
import json
def validate(out):
try: json.loads(out); return True
except: return FalseEjemplo en Python
import os, requests
API_KEY = os.environ['SCAVIO_API_KEY']
def scrape(url, instruction):
html = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'query': url, 'platform': 'extract', 'render_js': True}).json().get('html', '')
r = requests.post('http://localhost:11434/api/generate',
json={'model': 'dolphin-mixtral', 'prompt': f'{instruction}\n\n{html[:4000]}'})
return r.json().get('response', '')
print(scrape('https://example.com', 'List headings as JSON'))Ejemplo en JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
export async function scrape(url, instruction) {
const s = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'x-api-key': API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ query: url, platform: 'extract', render_js: true })
});
const html = (await s.json()).html || '';
const o = await fetch('http://localhost:11434/api/generate', {
method: 'POST',
body: JSON.stringify({ model: 'dolphin-mixtral', prompt: `${instruction}\n\n${html.slice(0, 4000)}` })
});
return (await o.json()).response;
}Salida esperada
Fully local extraction logic with cloud-hosted scraping infrastructure. Per-page cost: 1 Scavio credit + local GPU time. Data never leaves local box except the URL.