Volver al blog

Cómo construir análisis de búsqueda inteligente con Scrapeless y Google Gemini

Emily Chen
Emily Chen

Advanced Data Extraction Specialist

26-Jun-2025

En este tutorial, construiremos un poderoso sistema de análisis de búsqueda combinando las capacidades de raspado web de Scrapeless con el análisis de IA de Google Gemini. Aprenderás a extraer datos de búsqueda de Google y generar automáticamente informes útiles.

Requisitos Previos

  • Python 3.8+
  • Clave de API de Scrapeless
  • Clave de API de Google Gemini
  • Conocimientos básicos de Python

Paso 1: Configuración de tu Entorno

1. Creando un Entorno Virtual de Python

Antes de instalar paquetes, se recomienda crear un entorno virtual para aislar las dependencias de tu proyecto:

En Windows:

Copy
# Crear entorno virtual
python -m venv scrapeless-gemini-env

# Activar el entorno
scrapeless-gemini-env\Scripts\activate

En macOS:

Copy
# Crear entorno virtual
python3 -m venv scrapeless-gemini-env

# Activar el entorno
source scrapeless-gemini-env/bin/activate

En Linux:

Copy
# Crear entorno virtual
python3 -m venv scrapeless-gemini-env

# Activar el entorno
source scrapeless-gemini-env/bin/activate

Nota: Verás (scrapeless-gemini-env) en tu indicador de terminal cuando el entorno virtual esté activo.

2. Instalando Paquetes Requeridos

Una vez que tu entorno virtual esté activo, instala los paquetes requeridos:

Copy
pip install requests google-generativeai python-dotenv pandas

3. Configuración del Entorno

Crea un archivo .env en tu directorio de proyecto para tus claves de API:

Copy
SCRAPELESS_API_TOKEN=tu_token_aquí
GEMINI_API_KEY=tu_clave_gemini_aquí

4. Obteniendo tus Claves de API

Para la clave de API de Gemini: (AIzaSyBGhCVNdBsVVHlRNLEPEADGVQeKmDvDEfI)
Visita Google AI Studio para generar tu clave de API Gemini gratuita. Simplemente inicia sesión con tu cuenta de Google y crea una nueva clave de API.

Para el token de API de Scrapeless:

Regístrate en Scrapeless para obtener tu token de API. La plataforma ofrece un generoso nivel gratuito perfecto para comenzar con la recopilación de datos de SERP.

cómo obtener la clave de api de scrapeless

Paso 2: Crear el Cliente de Scrapeless

Construyamos un cliente simple para interactuar con la API de Búsqueda de Google de Scrapeless:

Copy
import json
import requests
import os
from dotenv import load_dotenv

load_dotenv()

class ScrapelessClient:
    def __init__(self):
        self.token = os.getenv('SCRAPELESS_API_TOKEN')
        self.host = "api.scrapeless.com"
        self.url = f"https://{self.host}/api/v1/scraper/request"
        self.headers = {"x-api-token": self.token}
    
    def search_google(self, query, **kwargs):
        """Realizar una búsqueda en Google usando Scrapeless"""
        payload = {
            "actor": "scraper.google.search",
            "input": {
                "q": query,
                "gl": kwargs.get("gl", "us"),
                "hl": kwargs.get("hl", "en"),
                "google_domain": kwargs.get("google_domain", "google.com"),
                "location": kwargs.get("location", ""),
                "tbs": kwargs.get("tbs", ""),
                "start": str(kwargs.get("start", 0)),
                "num": str(kwargs.get("num", 10))
            }
        }
        
        response = requests.post(
            self.url, 
            headers=self.headers, 
            data=json.dumps(payload)
        )
        
        if response.status_code != 200:
            print(f"Error: {response.status_code} - {response.text}")
            return None
            
        return response.json()

Paso 3: Integrar Google Gemini para Análisis

Ahora añadamos análisis impulsado por IA a nuestros resultados de búsqueda:

Copy
import google.generativeai as genai

class SearchAnalyzer:
    def __init__(self):
        genai.configure(api_key=os.getenv('GEMINI_API_KEY'))
        self.model = genai.GenerativeModel('gemini-1.5-flash')
        self.scraper = ScrapelessClient()
    
    def analyze_topic(self, topic):
        """Buscar y analizar un tema"""
        # Paso 1: Obtener resultados de búsqueda
        print(f"Buscando: {topic}")
        search_results = self.scraper.search_google(topic, num=20)
        
        if not search_results:
            return None
        
        # Paso 2: Extraer información clave
        extracted_data = self._extract_results(search_results)
        
        # Paso 3: Analizar con Gemini
        prompt = f"""
        Analiza estos resultados de búsqueda sobre "{topic}":
        
        {json.dumps(extracted_data, indent=2)}
        
        Proporciona:
        1. Temas y tendencias clave
        2. Principales fuentes de información
        3. Perspectivas notables
        4. Acciones recomendadas
        
        Formatea tu respuesta como un informe claro y accionable.
        """
        
        response = self.model.generate_content(prompt)
        
        return {
            "tema": topic,
            "datos_de_búsqueda": extracted_data,
            "análisis": response.text
        }
```python
def _extraer_resultados(self, datos_busqueda):
        """Extraer datos relevantes de los resultados de búsqueda"""
        resultados = []
        
        if "resultados_orgánicos" in datos_busqueda:
            for item in datos_busqueda["resultados_orgánicos"][:10]:
                resultados.append({
                    "título": item.get("título", ""),
                    "extracto": item.get("extracto", ""),
                    "enlace": item.get("enlace", ""),
                    "fuente": item.get("enlace_mostrado", "")
                })
        
        return resultados

Paso 4: Construir Casos de Uso Prácticos

Caso de Uso 1: Análisis de Competidores

Importante: Antes de ejecutar el análisis de competidores, asegúrate de reemplazar los nombres de las empresas de ejemplo por tu empresa real y competidores en el código a continuación.

Copy
class MonitorCompetidores:
    def __init__(self):
        self.análisis = AnalizadorDeBúsqueda()
    
    def analizar_competidores(self, nombre_empresa, competidores):
        """Analizar una empresa con respecto a sus competidores"""
        todos_datos = {}
        
        # Buscar cada empresa
        for comp in [nombre_empresa] + competidores:
            print(f"\nAnalizando: {comp}")
            
            # Buscar noticias y actualizaciones recientes
            consulta_noticias = f"{comp} últimas noticias actualizaciones 2025"
            datos = self.análisis.analizar_tema(consulta_noticias)
            
            if datos:
                todos_datos[comp] = datos
        
        # Generar análisis comparativo
        aviso_comparativo = f"""
        Compara {nombre_empresa} con los competidores basándote en estos datos:
        
        {json.dumps(todos_datos, indent=2)}
        
        Proporciona:
        1. Posicionamiento competitivo
        2. Fortalezas únicas de cada empresa
        3. Oportunidades de mercado
        4. Recomendaciones estratégicas para {nombre_empresa}
        """
        
        respuesta = self.análisis.modelo.generar_contenido(aviso_comparativo)
        
        return {
            "empresa": nombre_empresa,
            "competidores": competidores,
            "análisis": respuesta.text,
            "datos_crudos": todos_datos
        }

Caso de Uso 2: Monitoreo de Tendencias

Copy
class MonitorTendencias:
    def __init__(self):
        self.análisis = AnalizadorDeBúsqueda()
        self.raspador = ClienteSinRaspado()
    
    def monitorear_tendencia(self, palabra_clave, rango_tiempo="d"):
        """Monitorear tendencias para una palabra clave"""
        # Mapear rangos de tiempo al parámetro tbs de Google
        mapa_tiempo = {
            "h": "qdr:h",  # Última hora
            "d": "qdr:d",  # Último día
            "w": "qdr:w",  # Última semana
            "m": "qdr:m"   # Último mes
        }
        
        # Buscar con filtro de tiempo
        resultados = self.raspador.buscar_google(
            palabra_clave, 
            tbs=mapa_tiempo.get(rango_tiempo, "qdr:d"),
            num=30
        )
        
        if not resultados:
            return None
        
        # Analizar tendencias
        aviso = f"""
        Analiza las tendencias de "{palabra_clave}" basándote en los resultados de búsqueda recientes:
        
        {json.dumps(resultados.get("resultados_orgánicos", [])[:15], indent=2)}
        
        Identifica:
        1. Patrones emergentes
        2. Desarrollos clave
        3. Sentimiento (positivo/negativo/neutral)
        4. Predicciones futuras
        5. Insights accionables
        """
        
        respuesta = self.análisis.modelo.generar_contenido(aviso)
        
        return {
            "palabra_clave": palabra_clave,
            "rango_tiempo": rango_tiempo,
            "análisis": respuesta.text,
            "conteo_resultados": len(resultados.get("resultados_orgánicos", []))
        }

Paso 5: Crear la Aplicación Principal

Copy
def main():
    # Inicializar componentes
    monitor_competidores = MonitorCompetidores()
    monitor_tendencias = MonitorTendencias()
    
    # Ejemplo 1: Análisis de Competidores
    # IMPORTANTE: Reemplaza estas empresas de ejemplo por tu empresa real y competidores
    print("=== ANÁLISIS DE COMPETIDORES ===")
    análisis = monitor_competidores.analizar_competidores(
        nombre_empresa="OpenAI",  # Reemplaza con el nombre de tu empresa
        competidores=["Anthropic", "Google AI", "Meta AI"]  # Reemplaza con tus competidores
    )
    
    print("\nResultados del Análisis Competitivo:")
    print(análisis["análisis"])
    
    # Guardar resultados
    with open("análisis_competidores.json", "w") as f:
        json.dump(análisis, f, indent=2)
    
    # Ejemplo 2: Monitoreo de Tendencias
    # IMPORTANTE: Reemplaza la palabra clave por tus términos específicos de la industria
    print("\n\n=== MONITOREO DE TENDENCIAS ===")
    tendencias = monitor_tendencias.monitorear_tendencia(
        palabra_clave="regulación de inteligencia artificial",  # Reemplaza con tus palabras clave
        rango_tiempo="w"  # Última semana
    )
    
    print("\nResultados del Análisis de Tendencias:")
    print(tendencias["análisis"])
    
    # Ejemplo 3: Análisis de Múltiples Temas
    # IMPORTANTE: Reemplaza estos temas por tus temas específicos de la industria
    print("\n\n=== ANÁLISIS DE MÚLTIPLES TEMAS ===")
    temas = [
        "aplicaciones empresariales de IA generativa",  # Reemplaza con tus temas
        "amenazas cibernéticas de IA",

"aprendizaje automático en salud"
Si no hay resultados de búsqueda:
return None

Copy
    # Paso 2: Extraer información clave
    datos_extraídos = self._extract_results(search_results)
    
    # Paso 3: Analizar con Gemini
    aviso = f"""
    Analiza estos resultados de búsqueda sobre "{tema}":
    
    {json.dumps(datos_extraídos, indent=2)}
    
    Proporciona:
    1. Temas y tendencias clave
    2. Principales fuentes de información
    3. Perspectivas notables
    4. Acciones recomendadas
    
    Formatea tu respuesta como un informe claro y accionable.
    """
    
    respuesta = self.model.generate_content(aviso)
    
    return {
        "tema": tema,
        "datos_de_búsqueda": datos_extraídos,
        "análisis": respuesta.text
    }

def _extract_results(self, datos_de_búsqueda):
    """Extraer datos relevantes de los resultados de búsqueda"""
    resultados = []
    
    if "organic_results" in datos_de_búsqueda:
        for item in datos_de_búsqueda["organic_results"][:10]:
            resultados.append({
                "título": item.get("title", ""),
                "fragmento": item.get("snippet", ""),
                "enlace": item.get("link", ""),
                "fuente": item.get("displayed_link", "")
            })
    
    return resultados

class MonitorCompetidores:
def init(self):
self.analyzer = SearchAnalyzer()

Copy
def analyze_competitors(self, nombre_empresa, competidores):
    """Analiza una empresa frente a sus competidores"""
    todos_los_datos = {}
    
    # Buscar para cada empresa
    for comp in [nombre_empresa] + competidores:
        print(f"\nAnalizando: {comp}")
        
        # Buscar noticias y actualizaciones recientes
        consulta_noticias = f"{comp} últimas noticias actualizaciones 2025"
        datos = self.analyzer.analyze_topic(consulta_noticias)
        
        if datos:
            todos_los_datos[comp] = datos
        
        # Añadir un retraso entre solicitudes
        time.sleep(2)
    
    # Generar análisis comparativo
    aviso_comparativo = f"""
    Compara {nombre_empresa} con competidores basado en estos datos:
    
    {json.dumps(todos_los_datos, indent=2)}
    
    Proporciona:
    1. Posicionamiento competitivo
    2. Fortalezas únicas de cada empresa
    3. Oportunidades de mercado
    4. Recomendaciones estratégicas para {nombre_empresa}
    """
    
    respuesta = self.analyzer.model.generate_content(aviso_comparativo)
    
    return {
        "empresa": nombre_empresa,
        "competidores": competidores,
        "análisis": respuesta.text,
        "datos_raw": todos_los_datos
    }

class MonitorTendencias:
def init(self):
self.analyzer = SearchAnalyzer()
self.scraper = ScrapelessClient()

Copy
def monitor_trend(self, palabra_clave, rango_tiempo="d"):
    """Monitorear tendencias para una palabra clave"""
    # Mapear rangos de tiempo al parámetro tbs de Google
    mapa_tiempo = {
        "h": "qdr:h",  # Última hora
        "d": "qdr:d",  # Último día
        "w": "qdr:w",  # Última semana
        "m": "qdr:m"   # Último mes
    }
    
    # Buscar con filtro de tiempo
    resultados = self.scraper.search_google(
        palabra_clave, 
        tbs=mapa_tiempo.get(rango_tiempo, "qdr:d"),
        num=30
    )
    
    if not resultados:
        return None
    
    # Analizar tendencias
    aviso = f"""
    Analiza las tendencias para "{palabra_clave}" basado en resultados de búsqueda recientes:
    
    {json.dumps(resultados.get("organic_results", [])[:15], indent=2)}
    
    Identifica:
    1. Patrones emergentes
    2. Desarrollos clave
    3. Sentimiento (positivo/negativo/neutro)
    4. Predicciones futuras
    5. Perspectivas accionables
    """
    
    respuesta = self.analyzer.model.generate_content(aviso)
    
    return {
        "palabra_clave": palabra_clave,
        "rango_tiempo": rango_tiempo,
        "análisis": respuesta.text,
        "conteo_resultados": len(resultados.get("organic_results", []))
    }

class ExportadorDatos:
@staticmethod
def export_to_csv(datos, nombre_archivo=None):
"""Exportar resultados de búsqueda a CSV"""
if nombre_archivo is None:
nombre_archivo = f"resultados_búsqueda_{datetime.now().strftime('%Y%m%d_%H%M%S')}.csv"

Copy
    # Aplanar la estructura de datos
    filas = []
    for item in datos:
        if isinstance(item, dict) and "search_data" in item:
            for resultado in item["search_data"]:
                filas.append({
                    "tema": item.get("tema", ""),
                    "título": resultado.get("title", ""),
                    "fragmento": resultado.get("snippet", ""),
                    "enlace": resultado.get("link", ""),
                    "fuente": resultado.get("source", "")
                })
    
    df = pd.DataFrame(filas)
python Copy
df.to_csv(nombre_archivo, index=False)
        print(f"Datos exportados a {nombre_archivo}")
        
        return nombre_archivo
    
    @staticmethod
    def crear_reporte_html(datos_analisis, nombre_archivo="reporte.html"):
        """Crear un reporte HTML a partir de los datos de análisis"""
        html = f"""
        <!DOCTYPE html>
        <html>
        <head>
            <title>Reporte de Análisis de Búsqueda</title>
            <style>
                body {{ font-family: Arial, sans-serif; margin: 40px; }}
                .section {{ margin-bottom: 30px; padding: 20px; 
                           background-color: #f5f5f5; border-radius: 8px; }}
                h1 {{ color: #333; }}
                h2 {{ color: #666; }}
                pre {{ white-space: pre-wrap; word-wrap: break-word; }}
            </style>
        </head>
        <body>
            <h1>Reporte de Análisis de Búsqueda</h1>
            <p>Generado: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}</p>
            
            <div class="section">
                <h2>Resultados del Análisis</h2>
                <pre>{datos_analisis.get('analysis', 'No hay análisis disponible')}</pre>
            </div>
            
            <div class="section">
                <h2>Resumen de Datos</h2>
                <p>Tema: {datos_analisis.get('topic', 'N/A')}</p>
                <p>Resultados analizados: {len(datos_analisis.get('search_data', []))}</p>
            </div>
        </body>
        </html>
        """
        
        with open(nombre_archivo, 'w') as f:
            f.write(html)
        
        print(f"Reporte HTML creado: {nombre_archivo}")

def main():
    # Inicializar componentes
    monitor_competencia = CompetitorMonitor()
    monitor_tendencias = TrendMonitor()
    exportador = DataExporter()
    
    # Ejemplo 1: Análisis de Competencia
    print("=== ANÁLISIS DE COMPETENCIA ===")
    analisis = monitor_competencia.analyze_competitors(
        company_name="OpenAI",
        competitors=["Anthropic", "Google AI", "Meta AI"]
    )
    
    print("\nResultados del Análisis Competitivo:")
    print(analisis["analysis"])
    
    # Guardar resultados
    with open("analisis_producto.json", "w") as f:
        json.dump(analisis, f, indent=2)
    
    # Ejemplo 2: Monitoreo de Tendencias
    print("\n\n=== MONITOREO DE TENDENCIAS ===")
    tendencias = monitor_tendencias.monitor_trend(
        keyword="regulación de inteligencia artificial",
        time_range="w"  # Semana pasada
    )
    
    print("\nResultados del Análisis de Tendencias:")
    print(tendencias["analysis"])
    
    # Ejemplo 3: Análisis Multitemático
    print("\n\n=== ANÁLISIS MULTITEMÁTICO ===")
    temas = [
        "aplicaciones empresariales de IA generativa",
        "amenazas cibernéticas de IA",
        "salud en aprendizaje automático"
    ]
    
    analizador = SearchAnalyzer()
    todos_los_resultados = []
    
    for tema in temas:
        print(f"\nAnalizando: {tema}")
        resultado = analizador.analyze_topic(tema)
        
        if resultado:
            todos_los_resultados.append(resultado)
            # Guardar análisis individual
            nombre_archivo = f"{tema.replace(' ', '_')}_analisis.txt"
            with open(nombre_archivo, "w") as f:
                f.write(resultado["analysis"])
            print(f"Análisis guardado en {nombre_archivo}")
        
        # Retraso entre solicitudes
        time.sleep(2)
    
    # Exportar todos los resultados a CSV
    if todos_los_resultados:
        archivo_csv = exportador.export_to_csv(todos_los_resultados)
        print(f"\nTodos los resultados exportados a: {archivo_csv}")
        
        # Crear reporte HTML para el primer resultado
        if todos_los_resultados[0]:
            exportador.create_html_report(todos_los_resultados[0])

if __name__ == "__main__":
    main()

Conclusión

¡Felicidades! Has construido con éxito un sistema integral de análisis de búsqueda que aprovecha el poder de las capacidades de scraping web de grado empresarial de Scrapeless junto con el análisis avanzado de IA de Google Gemini. Esta solución inteligente transforma datos de búsqueda en bruto en información empresarial procesable de manera automática.

Lo que Has Logrado

A través de este tutorial, has creado un sistema modular y listo para producción que incluye:

  • Recolección de Datos Automatizada: Resultados de búsqueda de Google en tiempo real a través de la API de Scrapeless
  • Análisis Potenciado por IA: Generación de información inteligente utilizando Google Gemini
  • Inteligencia Competitiva: Monitoreo integral del paisaje competitivo
  • Detección de Tendencias: Identificación y análisis de tendencias del mercado en tiempo real
  • Informes en Múltiples Formatos: Exportaciones CSV e informes HTML para compartir con interesados
  • Arquitectura Escalable: Diseño modular para fácil personalización y extensión

Beneficios Clave para tu Negocio

Toma de Decisiones Estratégica: Transforma los datos de búsqueda en información estratégica que impulsa decisiones comerciales informadas y posicionamiento competitivo.

Eficiencia Temporal: Automatiza horas de investigación manual en minutos de análisis automatizado, liberando a tu equipo para un trabajo estratégico de mayor valor.

Conciencia del Mercado: Mantente a la vanguardia de las tendencias de la industria, movimientos de competidores y oportunidades emergentes con capacidades de monitoreo en tiempo real.
Inteligencia Rentable: Aprovecha herramientas de nivel empresarial a una fracción del costo de las soluciones tradicionales de investigación de mercado.

Ampliando Tu Sistema

La arquitectura modular facilita la extensión de la funcionalidad:

  • Fuentes de Datos Adicionales: Integra APIs de redes sociales, feeds de noticias o bases de datos de la industria
  • Análisis Avanzados: Agrega análisis de sentimientos, reconocimiento de entidades o modelado predictivo
  • Visualización: Crea paneles interactivos usando herramientas como Streamlit o Dash
  • Alertas: Implementa notificaciones en tiempo real para cambios críticos en el mercado
  • Soporte Multilingüe: Amplía la monitorización a mercados globales con búsqueda localizada

Mejores Prácticas para el Éxito

  1. Comienza Pequeño: Inicia con palabras clave específicas y amplía gradualmente el alcance de tu monitoreo
  2. Itera Prompts: Refina continuamente tus prompts de IA en función de la calidad de los resultados
  3. Valida Resultados: Realiza una verificación cruzada de las percepciones de IA con una verificación manual inicialmente
  4. Actualizaciones Regulares: Mantén actualizadas tus listas de competidores y palabras clave
  5. Retroalimentación de Partes Interesadas: Recoge aportes de los usuarios finales para mejorar la relevancia de los informes

Reflexiones Finales

Este sistema de análisis de búsqueda representa un paso significativo hacia la inteligencia empresarial basada en datos. Al combinar la recopilación de datos confiables de Scrapeless con las capacidades analíticas de Gemini, has creado una herramienta poderosa que puede adaptarse a prácticamente cualquier industria o caso de uso.

La inversión en la construcción de este sistema dará frutos a través de una mayor conciencia del mercado, inteligencia competitiva y capacidades de toma de decisiones estratégicas. A medida que continúas refinando y ampliando el sistema, descubrirás nuevas oportunidades para aprovechar los datos de búsqueda para el crecimiento empresarial.

Recuerda que la implementación exitosa no depende solo de la tecnología, sino de qué tan bien integres estos conocimientos en tus procesos comerciales y flujos de trabajo de toma de decisiones.


Para recursos adicionales, funciones avanzadas y documentación de API, visita Documentación de Scrapeless.

En Scrapeless, solo accedemos a datos disponibles públicamente y cumplimos estrictamente con las leyes, regulaciones y políticas de privacidad del sitio web aplicables. El contenido de este blog es sólo para fines de demostración y no implica ninguna actividad ilegal o infractora. No ofrecemos garantías y renunciamos a toda responsabilidad por el uso de la información de este blog o enlaces de terceros. Antes de realizar cualquier actividad de scraping, consulte a su asesor legal y revise los términos de servicio del sitio web de destino u obtenga los permisos necesarios.

Artículos más populares

Catalogar