🥳Únase a la Comunidad Scrapeless y Solicite su prueba gratuita para acceder a nuestro potente kit de herramientas de Web Scraping.
Volver al blog

¿Cómo extraer datos de Google Trends con Python?

Alex Johnson
Alex Johnson

Senior Web Scraping Engineer

25-Dec-2024

¿Qué es Google Trends?

Google Trends es una herramienta online gratuita proporcionada por Google que analiza la popularidad de palabras clave o términos de búsqueda específicos en el motor de búsqueda de Google a lo largo del tiempo.

Presenta datos en forma de gráficos para ayudar a los usuarios a comprender la popularidad de búsqueda de un determinado tema o palabra clave, e identifica patrones como fluctuaciones estacionales, tendencias emergentes o interés decreciente. Google Trends no solo admite el análisis de datos globales, sino que también se puede refinar a regiones específicas y proporcionar recomendaciones para términos y temas de búsqueda relacionados.

Google Trends se utiliza ampliamente en investigación de mercado, planificación de contenido, optimización SEO y análisis del comportamiento del usuario, ayudando a los usuarios a tomar decisiones más informadas basadas en datos.

Por ejemplo: En este artículo, vamos a extraer las tendencias de búsqueda de Google de 'DOGE' del mes anterior.

Tendencias de búsqueda de Google de DOGE

Paso 1: Requisitos previos

Instalar Python

En Windows

Usando el instalador oficial de Python

  1. Descargar el instalador de Python:

    • Ve al sitio web oficial de Python.
    • El sitio web debería sugerir automáticamente la última versión para Windows. Haz clic en el botón Descargar Python para descargar el instalador.
  2. Ejecutar el instalador:

    • Abre el archivo .exe descargado para iniciar el proceso de instalación.
  3. Personalizar la instalación (opcional):

    • Asegúrate de marcar la casilla que dice "Agregar Python a PATH" al principio de la ventana de instalación. Esto hace que Python sea accesible desde la línea de comandos (cmd o PowerShell).
    • También puedes hacer clic en "Personalizar instalación" para elegir funciones adicionales como pip, IDLE o documentación.
  4. Instalar Python:

    • Haz clic en Instalar ahora para instalar Python con la configuración predeterminada.
    • Después de la instalación, puedes verificarla abriendo el Símbolo del sistema (cmd) y escribiendo:
      bash Copy
      python --version
  5. Instalar pip (si es necesario):

    • Pip, el gestor de paquetes de Python, se instala de forma predeterminada con las versiones modernas de Python. Puedes comprobar si pip está instalado escribiendo:
      bash Copy
      pip --version

También puedes instalar Python directamente desde la Tienda Windows (disponible en Windows 10/11). Simplemente busca "Python" en la aplicación Microsoft Store y elige la versión que necesitas.

En macOS

Método 1. Usando Homebrew (Recomendado)

  1. Instalar Homebrew (si aún no está instalado):

    • Abre la aplicación Terminal.
    • Pega el siguiente comando para instalar Homebrew (gestor de paquetes para macOS):
      bash Copy
      /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  2. Instalar Python con Homebrew:

    • Una vez que Homebrew esté instalado, puedes instalar Python con este comando:
      bash Copy
      brew install python
  3. Verificar la instalación:

    • Después de la instalación, puedes verificar las versiones de Python y pip con los siguientes comandos:
      bash Copy
      python3 --version
      pip3 --version

Método 2. Usando el instalador oficial de Python

  1. Descargar el instalador de macOS:

  2. Ejecutar el instalador:

    • Abre el archivo .pkg para iniciar el proceso de instalación y sigue las instrucciones.
  3. Verificar la instalación:

    • Después de la instalación, abre Terminal y comprueba la versión de Python:
      bash Copy
      python3 --version
      pip3 --version

En Linux

Para distribuciones basadas en Debian/Ubuntu

  1. Actualizar la lista de paquetes:

    • Abre una terminal y ejecuta el siguiente comando para actualizar la lista de paquetes:
      bash Copy
      sudo apt update
  2. Instalar Python:

    • Para instalar Python 3 (generalmente la última versión de Python 3.x), ejecuta:
      bash Copy
      sudo apt install python3
  3. Instalar pip (si no está instalado):

    • Si pip no está instalado, puedes instalarlo con:
      bash Copy
      sudo apt install python3-pip
  4. Verificar la instalación:

    • Para comprobar la versión de Python instalada:
      bash Copy
      python3 --version
      pip3 --version

Para distribuciones basadas en Red Hat/Fedora

  1. Instalar Python 3:

    • Abre una terminal y ejecuta:
      bash Copy
      sudo dnf install python3
  2. Instalar pip (si es necesario):

    • Si pip no está instalado de forma predeterminada, puedes instalarlo con:
      bash Copy
      sudo dnf install python3-pip
  3. Verificar la instalación:

    • Para comprobar la versión de Python instalada:
      bash Copy
      python3 --version
      pip3 --version

Para Arch Linux y distribuciones basadas en Arch

  1. Instalar Python 3:

    • Ejecuta el siguiente comando:
      bash Copy
      sudo pacman -S python
  2. Instalar pip:

    • Pip debería instalarse con Python, pero si no es así, puedes instalarlo con:
      bash Copy
      sudo pacman -S python-pip
  3. Verificar la instalación:

    • Para comprobar las versiones de Python y pip:
      bash Copy
      python --version
      pip --version

Usando Python a través de Anaconda (Multiplataforma)

Anaconda es una distribución popular para la informática científica y viene con Python, bibliotecas y el gestor de paquetes conda.

  1. Descargar Anaconda:

  2. Instalar Anaconda:

    • Sigue las instrucciones de instalación según tu sistema operativo. Anaconda proporciona un instalador gráfico para Windows y macOS, así como instaladores de línea de comandos para todas las plataformas.
  3. Verificar la instalación:

    • Después de la instalación, abre una terminal (o Anaconda Prompt en Windows) y comprueba si Python funciona:

      bash Copy
      python --version
    • También puedes verificar conda (el gestor de paquetes para Anaconda):

      bash Copy
      conda --version

Gestionar versiones de Python (opcional)

Si necesitas gestionar varias versiones de Python en la misma máquina, puedes usar gestores de versiones:

  • pyenv: Un gestor de versiones de Python popular que funciona en Linux y macOS.

    • Instala a través de Homebrew o GitHub (para Linux y macOS).
    • En Windows, puedes usar pyenv-win.
    bash Copy
    pyenv install 3.9.0
    pyenv global 3.9.0

Como aún no hemos desarrollado una biblioteca de terceros para usar, solo necesitas instalar requests para experimentar el servicio de la API de Scrapeless

Shell Copy
pip install requests

Paso 2: Configurar los campos del código que necesitan

Escribir el código

A continuación, necesitamos saber cómo obtener los datos que necesitamos a través de la configuración:

  • Palabra clave: En este ejemplo, nuestra palabra clave es 'DOGE' (también admitimos la recopilación de datos de comparación de varias palabras clave)
  • Configuración de datos:
    • País: País de consulta, el predeterminado es 'Mundial'
    • Tiempo: Período de tiempo
    • Categoría: Tipo
    • Propiedad: Fuente

Paso 3: Extraer datos

Ahora, obtengamos los datos objetivo usando código Python:

Python Copy
import json
import requests


class Payload:
    def __init__(self, actor, input_data, proxy):
        self.actor = actor
        self.input = input_data
        self.proxy = proxy


def send_request(data_type, search_term):
    host = "api.scrapeless.com"
    url = f"https://{host}/api/v1/scraper/request"
    token = "scrapeless-api-key"  # TODO:use your api key

    headers = {"x-api-token": token}

    input_data = {
        "q": search_term,
        "date": "today 1-m",
        "data_type": data_type,
        "hl": "en-sg",
        "tz": "-480",
        "geo": "",
        "cat": "",
        "property": "",
    }

    proxy = {
        "country": "ANY",
    }

    payload = Payload("scraper.google.trends", input_data, proxy)

    json_payload = json.dumps(payload.__dict__)

    response = requests.post(url, headers=headers, data=json_payload)

    if response.status_code != 200:
        print("Error:", response.status_code, response.text)
        return

    print("body", response.text)


if __name__ == "__main__":
    send_request(data_type="interest_over_time", search_term="DOGE")
  • Salida:
JSON Copy
{"interest_over_time":{"averages":[],"timelineData":[{"formattedAxisTime":"24 Nov","formattedTime":"24 Nov 2024","formattedValue":["85"],"hasData":[true],"time":"1732406400","value":[85]},{"formattedAxisTime":"25 Nov","formattedTime":"25 Nov 2024","formattedValue":["89"],"hasData":[true],"time":"1732492800","value":[89]},{"formattedAxisTime":"26 Nov","formattedTime":"26 Nov 2024","formattedValue":["68"],"hasData":[true],"time":"1732579200","value":[68]},{"formattedAxisTime":"27 Nov","formattedTime":"27 Nov 2024","formattedValue":["60"],"hasData":[true],"time":"1732665600","value":[60]},{"formattedAxisTime":"28 Nov","formattedTime":"28 Nov 2024","formattedValue":["49"],"hasData":[true],"time":"1732752000","value":[49]},{"formattedAxisTime":"29 Nov","formattedTime":"29 Nov 2024","formattedValue":["55"],"hasData":[true],"time":"1732838400","value":[55]},{"formattedAxisTime":"30 Nov","formattedTime":"30 Nov 2024","formattedValue":["54"],"hasData":[true],"time":"1732924800","value":[54]},{"formattedAxisTime":"1 Dec","formattedTime":"1 Dec 2024","formattedValue":["55"],"hasData":[true],"time":"1733011200","value":[55]},{"formattedAxisTime":"2 Dec","formattedTime":"2 Dec 2024","formattedValue":["64"],"hasData":[true],"time":"1733097600","value":[64]},{"formattedAxisTime":"3 Dec","formattedTime":"3 Dec 2024","formattedValue":["57"],"hasData":[true],"time":"1733184000","value":[57]},{"formattedAxisTime":"4 Dec","formattedTime":"4 Dec 2024","formattedValue":["61"],"hasData":[true],"time":"1733270400","value":[61]},{"formattedAxisTime":"5 Dec","formattedTime":"5 Dec 2024","formattedValue":["100"],"hasData":[true],"time":"1733356800","value":[100]},{"formattedAxisTime":"6 Dec","formattedTime":"6 Dec 2024","formattedValue":["84"],"hasData":[true],"time":"1733443200","value":[84]},{"formattedAxisTime":"7 Dec","formattedTime":"7 Dec 2024","formattedValue":["79"],"hasData":[true],"time":"1733529600","value":[79]},{"formattedAxisTime":"8 Dec","formattedTime":"8 Dec 2024","formattedValue":["72"],"hasData":[true],"time":"1733616000","value":[72]},{"formattedAxisTime":"9 Dec","formattedTime":"9 Dec 2024","formattedValue":["64"],"hasData":[true],"time":"1733702400","value":[64]},{"formattedAxisTime":"10 Dec","formattedTime":"10 Dec 2024","formattedValue":["64"],"hasData":[true],"time":"1733788800","value":[64]},{"formattedAxisTime":"11 Dec","formattedTime":"11 Dec 2024","formattedValue":["63"],"hasData":[true],"time":"1733875200","value":[63]},{"formattedAxisTime":"12 Dec","formattedTime":"12 Dec 2024","formattedValue":["59"],"hasData":[true],"time":"1733961600","value":[59]},{"formattedAxisTime":"13 Dec","formattedTime":"13 Dec 2024","formattedValue":["54"],"hasData":[true],"time":"1734048000","value":[54]},{"formattedAxisTime":"14 Dec","formattedTime":"14 Dec 2024","formattedValue":["48"],"hasData":[true],"time":"1734134400","value":[48]},{"formattedAxisTime":"15 Dec","formattedTime":"15 Dec 2024","formattedValue":["43"],"hasData":[true],"time":"1734220800","value":[43]},{"formattedAxisTime":"16 Dec","formattedTime":"16 Dec 2024","formattedValue":["48"],"hasData":[true],"time":"1734307200","value":[48]},{"formattedAxisTime":"17 Dec","formattedTime":"17 Dec 2024","formattedValue":["55"],"hasData":[true],"time":"1734393600","value":[55]},{"formattedAxisTime":"18 Dec","formattedTime":"18 Dec 2024","formattedValue":["52"],"hasData":[true],"time":"1734480000","value":[52]},{"formattedAxisTime":"19 Dec","formattedTime":"19 Dec 2024","formattedValue":["63"],"hasData":[true],"time":"1734566400","value":[63]},{"formattedAxisTime":"20 Dec","formattedTime":"20 Dec 2024","formattedValue":["64"],"hasData":[true],"time":"1734652800","value":[64]},{"formattedAxisTime":"21 Dec","formattedTime":"21 Dec 2024","formattedValue":["47"],"hasData":[true],"time":"1734739200","value":[47]},{"formattedAxisTime":"22 Dec","formattedTime":"22 Dec 2024","formattedValue":["44"],"hasData":[true],"time":"1734825600","value":[44]},{"formattedAxisTime":"23 Dec","formattedTime":"23 Dec 2024","formattedValue":["44"],"hasData":[true],"time":"1734912000","value":[44]},{"formattedAxisTime":"24 Dec","formattedTime":"24 Dec 2024","formattedValue":["46"],"hasData":[true],"isPartial":true,"time":"1734998400","value":[46]}]}}

Paso 4: Optimizar el código

  • Configurar múltiples países
Python Copy
country_map = {
        "Worldwide": "ANY",
        "Afghanistan":"AF",
        "Åland Islands":"AX",
        "Albania":"AL",
        #...
    }
  • Configurar múltiples períodos de tiempo
Python Copy
time_map = {
        "Past hour":"now 1-H",
        "Past 4 hours":"now 4-H",
        "Past 7 days":"now 7-d",
        "Past 30 days":"today 1-m",
        # ...
    }
  • Configurar múltiples categorías
Python Copy
category_map = {
        "All categories": 0,
        "Arts & Entertainment": 3,
        "Autos & Vehicles": 47,
        # ...
    }
  • Configurar múltiples fuentes
Python Copy
property_map = {
        "Web Search":"",
        "Image Search":"images",
        "Google Shopping":"froogle",
         # ...
    }
  • Código mejorado:
Python Copy
import json
import requests

country_map = {
    "Worldwide": "",
    "Afghanistan": "AF",
    "Åland Islands": "AX",
    "Albania": "AL",
    # ...
}
time_map = {
    "Past hour": "now 1-H",
    "Past 4 hours": "now 4-H",
    "Past 7 days": "now 7-d",
    "Past 30 days": "today 1-m",
    # ...
}
category_map = {
    "All categories": "",
    "Arts & Entertainment": "3",
    "Autos & Vehicles": "47",
    # ...
}
property_map = {
    "Web Search": "",
    "Image Search": "images",
    "Google Shopping": "froogle",
    # ...
}


class Payload:
    def __init__(self, actor, input_data, proxy):
        self.actor = actor
        self.input = input_data
        self.proxy = proxy


def send_request(data_type, search_term, country, time, category, property):
    host = "api.scrapeless.com"
    url = f"https://{host}/api/v1/scraper/request"
    token = "scrapeless-api-key"  # TODO:use your api key

    headers = {"x-api-token": token}

    input_data = {
        "q": search_term,  # search term
        "geo": country,
        "date": time,
        "cat": category,
        "property": property,
        "hl": "en-sg",
        "tz": "-480",
        "data_type": data_type
    }

    proxy = {
        "country": "ANY",
    }

    payload = Payload("scraper.google.trends", input_data, proxy)

    json_payload = json.dumps(payload.__dict__)

    response = requests.post(url, headers=headers, data=json_payload, verify=False)

    if response.status_code != 200:
        print("Error:", response.status_code, response.text)
        return

    print("body", response.text)


if __name__ == "__main__":
    # one search_term
    send_request(
        data_type="interest_over_time",
        search_term="DOGE",
        country=country_map["Worldwide"],
        time=time_map["Past 30 days"],
        category=category_map["Arts & Entertainment"],
        property=property_map["Web Search"],
    )
    # two search_term
    send_request(
        data_type="interest_over_time",
        search_term="DOGE,python",
        country=country_map["Worldwide"],
        time=time_map["Past 30 days"],
        category=category_map["Arts & Entertainment"],
        property=property_map["Web Search"],
    )

Problemas en el proceso de rastreo

  • Necesitamos hacer juicios sobre algunos errores de red para evitar que los errores causen cierres;
  • Agregar un cierto mecanismo de reintento puede evitar que las interrupciones en el proceso de rastreo causen la adquisición de datos duplicados/no válidos.
  • Paso 1. Inicia sesión en Scrapeless
  • Paso 2. Haz clic en "API de Scraping"
API de Scraping
  • Paso 3. Encuentra nuestro panel "Google Trends" y entra:
Google Trends
  • Paso 4. Configura tus datos en el panel de operaciones de la izquierda:
Configura tus datos
  • Paso 5. Haz clic en el botón "Iniciar Scraping" y luego podrás obtener el resultado:
Iniciar Scraping

Después de obtener los resultados, puedes verificar si los datos son precisos.

Scrapeless es una solución innovadora diseñada para simplificar el proceso de extracción de datos de sitios web. Nuestra API está diseñada para navegar por los entornos web más complejos y gestionar eficazmente el contenido dinámico y la representación de JavaScript.

¿Por qué Scrapeless funciona bien para extraer datos de Google Trends?

Si usamos la codificación de Python para rastrear Google Trends solos, fácilmente encontraremos el sistema de verificación reCAPTHCA. Esto trae grandes desafíos a nuestro proceso de rastreo.

Sin embargo, la API de Scraping de Google Trends de Scrapeless integra un solucionador de CAPTCHA y rotación inteligente de IP, por lo que no hay necesidad de preocuparse por ser monitoreado e identificado por el sitio web. Scrapeless garantiza una tasa de éxito de rastreo de sitios web del 99,9 %, proporcionándote un entorno de rastreo de datos completamente estable y seguro.

4 ventajas típicas de Scrapeless

  1. Precio competitivo
    Scrapeless no solo es potente, sino que también garantiza un precio de mercado más competitivo. El precio de las llamadas al servicio de la API de scraping de Google Trends de Scrapeless comienza en $2 por 1000 solicitudes exitosas.
  2. Estabilidad
    La amplia experiencia y los sistemas robustos garantizan un raspado confiable e ininterrumpido con capacidades avanzadas de resolución de CAPTCHA.
  3. Velocidad
    Un gran grupo de proxies garantiza un raspado eficiente a gran escala sin bloqueos de IP o retrasos.
  4. Rentable
    La tecnología patentada minimiza los costos, lo que nos permite ofrecer precios competitivos sin comprometer la calidad.
  5. Garantía SLAS
    Los acuerdos de nivel de servicio garantizan un rendimiento y una confiabilidad constantes para las necesidades empresariales.

Preguntas frecuentes

Sí, es completamente legal extraer los datos de Google Trends globales y públicamente disponibles. Sin embargo, por favor, no dañes tu sitio enviando demasiadas solicitudes en un corto período de tiempo.

¿Es engañoso Google Trends?

Google Trends no es un reflejo completo de la actividad de búsqueda. Google Trends filtra ciertos tipos de búsquedas, como las búsquedas realizadas por muy pocas personas. Las tendencias solo muestran datos para términos populares, por lo que los términos con bajo volumen de búsqueda se mostrarán como "0".

No, Google Trends aún no proporciona una API pública. Sin embargo, puedes acceder a los datos de Google Trends desde API privadas en herramientas de desarrolladores de terceros, como Scrapeless.

Conclusiones

Google Trends es una valiosa herramienta de integración de datos que proporciona análisis de palabras clave y temas de búsqueda populares mediante el análisis de consultas de búsqueda en motores de búsqueda. En este artículo, mostramos en profundidad cómo extraer datos de Google Trends usando Python.

Sin embargo, extraer datos de Google Trends usando la codificación de Python siempre encuentra el obstáculo del CAPTCHA. Esto hace que tu extracción de datos sea particularmente difícil. Aunque la API de Google Trends no está disponible, ¡la API de Google Trends de Scrapeless será tu herramienta ideal!

¡Regístrate ahora para obtener una potente herramienta de extracción de datos de Google Trends!

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