Cómo extraer datos de Google Trends con Python

Comentarios: 0

El uso de Python y Playwright para extraer datos de Google Trends permite un examen detallado de la popularidad de las palabras clave y el seguimiento de los cambios de tendencia a lo largo del tiempo. Este enfoque proporciona información crucial para el análisis de marketing.

Requisitos

Antes de sumergirte en el código, asegúrate de tener instaladas las siguientes herramientas:

  • Python 3.7+;
  • Biblioteca playwright.

Puedes instalar Playwright usando pip:

pip install playwright

Para utilizar Playwright con código asíncrono, también necesitará la biblioteca asyncio, que se incluye en Python 3.7+ de forma predeterminada.

Configuración de Playwright para trabajar con Google Trends

Utilizaremos Playwright, una potente herramienta de automatización del navegador, para navegar por el sitio web de Google Trends y descargar archivos CSV que contienen datos de tendencias. Este tutorial te guiará a través de todo el proceso.

Instalación de Playwright

En primer lugar, asegúrese de que Playwright está instalado:

playwright install

Si no quieres instalar todos los navegadores, utiliza este comando para instalar sólo el navegador Chromium.

playwright install chromium

Configuración del proxy

A la hora de scrapear plataformas como Google, que contrarrestan activamente la actividad de los bots, el uso de proxies es esencial. Los proxies permiten la rotación de IP, ayudando a reducir el riesgo de ser bloqueado. En nuestro script, utilizamos proxies privados para enrutar nuestras peticiones.

proxy = {
    "server": "IP:PORT",
    "username": "your_username",
    "password": "your_password"
}

Sustituya las variables IP, PUERTO, nombre de usuario y contraseña por los datos reales de su servidor proxy.

Proceso paso a paso de trabajo con Playwright

En este ejemplo, primero navegamos a google.com para evitar posibles bloqueos antes de dirigirnos a la página de Google Trends. Esto se hace para imitar el comportamiento normal del usuario y evitar la detección.

Paso 1: Preparación para trabajar con Google Trends

Este paso implica acciones preliminares para evitar ser marcado y bloqueado por Google:

  • Iniciar el navegador: esto implica iniciar una instancia del navegador Chromium configurado con ajustes de proxy. El uso de proxies ayuda a reducir las posibilidades de detección al disfrazar la actividad de scraping como un uso normal del navegador;
  • Navegación a Google: al acceder primero a google.com, aclimata los sistemas de seguimiento de Google a la presencia de lo que percibe como un nuevo usuario. Este sencillo paso de navegación reduce la probabilidad de que las actividades posteriores se clasifiquen como bots, evitando así el bloqueo inmediato.
import asyncio
from playwright.async_api import Playwright, async_playwright

async def run(playwright: Playwright) -> None:
    # Iniciar el navegador con la configuración del proxy
    browser = await playwright.chromium.launch(headless=False, proxy={
        "server": "IP:PORT",
        "username": "your_username",
        "password": "your_password"
    })
    
    # Crear un nuevo contexto de navegación
    context = await browser.new_context()
    
    # Abrir una nueva página
    page = await context.new_page()
    
    # Visitar Google para imitar la navegación normal
    await page.goto("https://google.com")

Paso 2: Navegación y descarga de datos de Google Trends

A continuación, navegue directamente a la página de Google Trends donde se encuentran los datos necesarios. Google Trends ofrece opciones para descargar los datos directamente en formato CSV, lo que facilita el proceso de extracción. Automatice la acción de hacer clic en el botón "Descargar" para iniciar la descarga de datos. Esto permite extraer los datos de tendencias sin intervención manual. Una vez que el botón "Descargar" se hace visible, la automatización debe proceder a hacer clic en él, iniciando la descarga del archivo CSV que contiene los datos de tendencias necesarios.

 # Navegar a Google Trends
    await page.goto("https://trends.google.com/trends/explore?q=%2Fg%2F11bc6c__s2&date=now%201-d&geo=US&hl=en-US")
    
    # Esperar el botón de descarga y pulsarlo
    async with page.expect_download() as download_info:
        await page.get_by_role("button", name="file_download").first.click()
    
    # Gestión de la descarga
    download = await download_info.value
    print(download.suggested_filename)

Paso 3: Guardar los datos y finalizar la sesión

El archivo CSV descargado se guarda automáticamente en un directorio especificado de su dispositivo local.

 # Guardar el archivo descargado
    await download.save_as("/path/to/save/" + download.suggested_filename)

Ejemplo de código completo

Este es el código completo para descargar los datos de Google Trends como un archivo CSV usando Playwright:

import asyncio
import os
import re
from playwright.async_api import Playwright, async_playwright


async def run(playwright: Playwright) -> None:
   # Iniciar el navegador con la configuración del proxy
   browser = await playwright.chromium.launch(headless=False, proxy={
       "server": "IP:PORT",
       "username": "your_username",
       "password": "your_password"
   })

   # Crear un nuevo contexto de navegación
   context = await browser.new_context()

   # Abrir una nueva página
   page = await context.new_page()

   # Visita Google para evitar ser detectado
   await page.goto("https://google.com")

   # Ir a Google Trends
   await page.goto("https://trends.google.com/trends/explore?q=%2Fg%2F11bc6c__s2&date=now%201-d&geo=US&hl=en-US")

   # Haga clic en el botón de descarga
   async with page.expect_download() as download_info:
       await page.get_by_role("button", name=re.compile(r"file_download")).first.click()

   # Guardar el archivo descargado
   download = await download_info.value
   destination_path = os.path.join("path/to/save", download.suggested_filename)
   await download.save_as(destination_path)

   # Cerrar el contexto y el navegador
   await context.close()
   await browser.close()


async def main() -> None:
   async with async_playwright() as playwright:
       await run(playwright)


asyncio.run(main())

Siguiendo esta guía, podrá descargar eficazmente datos de tendencias, gestionar la rotación de proxies y eludir los mecanismos de protección contra bots. Para evitar bloqueos de forma eficaz, es crucial utilizar servidores proxy fiables. Los proxies residenciales, que ofrecen direcciones IP dinámicas y no necesitan configuración de rotación, son muy recomendables. Alternativamente, los proxies estáticos ISP también son eficaces; compre el número necesario de IPs y configure la rotación regular de IPs en su script. Cualquiera de las dos opciones garantiza un riesgo mínimo de bloqueo y captcha, lo que facilita un raspado de datos más rápido y fluido.

Comentarios:

0 Comentarios