ScrapingRobot rompió las defensas anti-bot. Se borraron los créditos de la API de Sonar. SerpAPI tiene una demanda activa. Ninguna API es infalible. Este tutorial crea una conmutación por error automática entre varios proveedores.
Requisitos previos
- Claves API para 2-3 API SERP
- Python 3.8+
Guia paso a paso
Paso 1: Definir la pila de proveedores
Proveedores primarios, alternativos y de emergencia.
vendors = [
{'name': 'scavio', 'url': 'https://api.scavio.dev/api/v1/search',
'headers': {'x-api-key': os.environ['SCAVIO_API_KEY']},
'payload_fn': lambda q: {'platform': 'google', 'query': q}},
{'name': 'serper', 'url': 'https://google.serper.dev/search',
'headers': {'X-API-KEY': os.environ['SERPER_API_KEY']},
'payload_fn': lambda q: {'q': q}},
]Paso 2: Construya la función de conmutación por error
Pruebe con los proveedores en orden, no pase al siguiente por error.
import requests
def search_with_failover(query):
for vendor in vendors:
try:
r = requests.post(vendor['url'], headers=vendor['headers'],
json=vendor['payload_fn'](query), timeout=15)
if r.status_code == 200:
return {'vendor': vendor['name'], 'data': r.json()}
except Exception:
continue
raise Exception('All vendors failed')Paso 3: Normalizar respuestas
Cada proveedor devuelve diferentes formas JSON. Normalizar.
def normalize(vendor_name, data):
if vendor_name == 'scavio':
return [{'title': r['title'], 'url': r['link'], 'snippet': r['snippet']}
for r in data.get('organic_results', [])]
elif vendor_name == 'serper':
return [{'title': r['title'], 'url': r['link'], 'snippet': r['snippet']}
for r in data.get('organic', [])]
return dataPaso 4: Registrar el rendimiento del proveedor
Realice un seguimiento de qué proveedores tienen éxito y fracasan con el tiempo.
import json, datetime
def log_result(vendor, success, latency):
with open('failover_log.jsonl', 'a') as f:
f.write(json.dumps({'ts': datetime.datetime.now().isoformat(),
'vendor': vendor, 'success': success, 'latency': latency}) + '\n')Ejemplo en Python
# Production failover: Scavio (primary) → Serper (fallback)
# Normalize output shape across vendors
# Log performance for quarterly vendor reviewEjemplo en JavaScript
// Same failover pattern in JS with try/catch per vendor.Salida esperada
Multi-vendor SERP failover stack: primary → fallback → emergency. Normalized output, performance logging, vendor-neutral application code.