Reemplace ScrapingAnt con una API de búsqueda para cualquier consulta que tenga como objetivo datos indexados de búsqueda, como clasificaciones, fragmentos, precios y reseñas. ScrapingAnt se destaca en la representación de páginas con mucho JavaScript, pero usarlo para extraer resultados de Google o listados de Amazon significa pagar costos de proxy y representación por los datos que una API de búsqueda devuelve como JSON estructurado. Audite su uso de ScrapingAnt, identifique qué llamadas apuntan a contenido indexado por búsqueda, cámbielas a Scavio y mantenga ScrapingAnt solo para las páginas que requieren una representación completa del navegador. La mayoría de los equipos encuentran que entre el 40% y el 60% de las llamadas de ScrapingAnt pueden pasar a una API de búsqueda a un costo menor y con una mejor estructura.
Requisitos previos
- Python 3.8+ instalado
- solicita biblioteca instalada
- Una clave API de Scavio de scavio.dev
- Acceso a sus registros de uso de ScrapingAnt
Guia paso a paso
Paso 1: Auditar consultas de ScrapingAnt
Clasifique sus llamadas de ScrapingAnt en depósitos indexados por búsqueda (pueden migrar) y dependientes de la representación (conserva ScrapingAnt).
import os, json
API_KEY = os.environ['SCAVIO_API_KEY']
# Categorize your ScrapingAnt usage
SEARCH_INDEXED = [
'google.com/search',
'amazon.com/s?',
'youtube.com/results',
'walmart.com/search',
'reddit.com/search',
]
def audit_calls(call_log: list) -> dict:
migratable, keep = [], []
for call in call_log:
url = call.get('url', '')
if any(pattern in url for pattern in SEARCH_INDEXED):
migratable.append(call)
else:
keep.append(call)
print(f'Total: {len(call_log)}, Migratable: {len(migratable)}, Keep ScrapingAnt: {len(keep)}')
return {'migratable': migratable, 'keep': keep}
audit_calls([{'url': 'https://google.com/search?q=test'}, {'url': 'https://app.example.com/dashboard'}])Paso 2: Identificar consultas indexadas de búsqueda
Extraiga las consultas de búsqueda reales de las URL de ScrapingAnt y asígnelas a llamadas API específicas de la plataforma.
from urllib.parse import urlparse, parse_qs
import requests
def extract_search_query(url: str) -> dict:
parsed = urlparse(url)
host = parsed.netloc.replace('www.', '')
params = parse_qs(parsed.query)
if 'google.com' in host:
return {'platform': 'google', 'query': params.get('q', [''])[0]}
elif 'amazon.com' in host:
return {'platform': 'amazon', 'query': params.get('k', [''])[0]}
elif 'youtube.com' in host:
return {'platform': 'youtube', 'query': params.get('search_query', [''])[0]}
elif 'walmart.com' in host:
return {'platform': 'walmart', 'query': params.get('q', [''])[0]}
return {'platform': 'google', 'query': ''}
print(extract_search_query('https://www.google.com/search?q=best+crm+2026'))
print(extract_search_query('https://www.amazon.com/s?k=wireless+earbuds'))Paso 3: Intercambiar llamadas indexadas de búsqueda a API
Reemplace las llamadas HTTP de ScrapingAnt con llamadas a la API de Scavio para todas las consultas indexadas por búsqueda.
def scavio_search(platform: str, query: str) -> list:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': platform, 'query': query}, timeout=10)
resp.raise_for_status()
return resp.json().get('organic_results', [])
def migrated_search(url: str) -> list:
"""Drop-in replacement for ScrapingAnt search calls."""
params = extract_search_query(url)
if not params['query']:
return []
results = scavio_search(params['platform'], params['query'])
print(f'{params["platform"]}: {len(results)} results for "{params["query"][:40]}"')
return results
migrated_search('https://www.google.com/search?q=best+crm+2026')Paso 4: Mantenga ScrapingAnt para páginas con mucho procesamiento
Enrute el tráfico que no sea de búsqueda a través de ScrapingAnt mientras que el tráfico de búsqueda pasa por Scavio. Utilice una función de enrutador.
def smart_fetch(url: str) -> dict:
"""Route search-indexed URLs to Scavio, everything else to ScrapingAnt."""
parsed = urlparse(url)
host = parsed.netloc.replace('www.', '')
search_hosts = ['google.com', 'amazon.com', 'youtube.com', 'walmart.com', 'reddit.com']
if any(h in host for h in search_hosts) and '/search' in parsed.path or '/s?' in url or '/results' in parsed.path:
results = migrated_search(url)
return {'source': 'scavio', 'results': results}
else:
# Keep ScrapingAnt for JS-heavy pages
# resp = requests.get('https://api.scrapingant.com/v2/general', params={'url': url, ...})
return {'source': 'scrapingant', 'note': 'JS rendering required'}
print(smart_fetch('https://www.google.com/search?q=test'))
print(smart_fetch('https://app.example.com/dashboard'))Ejemplo en Python
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def search(platform, query):
data = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': platform, 'query': query}).json()
return data.get('organic_results', [])
# Replaces: ScrapingAnt call to google.com/search?q=...
results = search('google', 'best crm 2026')
print(f'{len(results)} structured results')Ejemplo en JavaScript
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
async function search(platform, query) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: H, body: JSON.stringify({platform, query})
});
return (await r.json()).organic_results || [];
}
// Replaces: ScrapingAnt call to google.com/search?q=...
search('google', 'best crm 2026').then(r => console.log(r.length + ' results'));Salida esperada
A hybrid pipeline where search-indexed queries route to Scavio for structured JSON and rendering-heavy pages stay on ScrapingAnt, reducing cost and improving data quality.