La tasa de éxito del scraper es la única métrica que importa: el porcentaje de sitios de destino donde se obtienen datos limpios y estructurados. Este tutorial ejecuta un punto de referencia de 500 sitios que analiza primero un raspador de candidatos, luego Scavio como verdad sobre el terreno, e informa la tasa de éxito, los bloqueos de Cloudflare y las respuestas vacías.
Requisitos previos
- Python 3.10+
- Una clave API de Scavio
- Un raspador de candidatos (propio o de la competencia)
- Una lista de prueba de 500 URL
Guia paso a paso
Paso 1: Construya el panel de URL
500 URL en sitios estáticos simples, con mucho JS y protegidos por Cloudflare.
import csv
with open('panel.csv') as f:
URLS = [row[0] for row in csv.reader(f)]Paso 2: Definir el bucle de referencia
Golpee al candidato primero, luego a Scavio, registre los resultados.
import requests, os
API_KEY = os.environ['SCAVIO_API_KEY']
def candidate_scrape(url):
try:
return requests.get(url, timeout=10).text
except: return ''
def scavio_scrape(url):
r = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'query': url, 'platform': 'extract'})
return r.json().get('html', '')Paso 3: Califica cada resultado
Limpiar HTML con contenido = éxito.
def is_success(html):
return len(html) > 500 and '<body' in html.lower()Paso 4: Ejecute el punto de referencia
Recopile pase/falla por URL para cada herramienta.
results = []
for u in URLS:
cand = is_success(candidate_scrape(u))
scav = is_success(scavio_scrape(u))
results.append({'url': u, 'candidate': cand, 'scavio': scav})Paso 5: Publicar los resultados
Tasa de éxito, tasa de bloqueo de Cloudflare y brecha.
def summarize(r):
n = len(r)
return {
'candidate_rate': sum(1 for x in r if x['candidate']) / n,
'scavio_rate': sum(1 for x in r if x['scavio']) / n
}
print(summarize(results))Ejemplo en Python
import os, requests
API_KEY = os.environ['SCAVIO_API_KEY']
URLS = ['https://example.com', 'https://cloudflare-protected.com']
def scavio_extract(url):
r = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'query': url, 'platform': 'extract'})
return r.json().get('html', '')
wins = sum(1 for u in URLS if len(scavio_extract(u)) > 500)
print(f'Scavio success: {wins}/{len(URLS)}')Ejemplo en JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
const URLS = ['https://example.com', 'https://cloudflare-protected.com'];
async function scavioExtract(url) {
const r = 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' })
});
const d = await r.json();
return d.html || '';
}
let wins = 0;
for (const u of URLS) if ((await scavioExtract(u)).length > 500) wins++;
console.log(`Scavio success: ${wins}/${URLS.length}`);Salida esperada
Per-tool success rate (e.g., candidate 62%, Scavio 94%), Cloudflare block rate breakdown, and per-URL diff. Typical benchmark run: 20-30 minutes for 500 URLs.