Cómo comparar SERPs con Python

Last Updated on marzo 21, 2024 by Álvaro

Cada vez que revisaba la intención de búsqueda de varias keywords me veía contando, memorizando dominios… Por eso, decidí hacer un sencillo script en Python (con ayuda de mi colega ChatGPT) que me ayudase con esta labor. Como tampoco es que sea un secreto de estado, lo pongo en dominio público por si hay algún interesado.

El script actualmente solo compara keywords de 2 en 2, pero si veo bastante aceptación (o si yo lo necesitase) consideraría ampliarlo en un futuro. Mentiría si digo que no lo he intentado pero que la cosa se ponía ya más complicada. Llevo sin programar bastante tiempo y desempolvar los antiguos conocimientos de programación ha sido más difícil de lo que parece. También en un futuro, valoro incluir diagramas de Venn que muestren como intersección los resultados coincidentes entre las varias keywords.

El mejor script comparador de SERPs del mundo

El script tiene dos parámetros de entrada, keyword_a y keyword_b, que se deben sustituir por las keywords que se desean comparar. Al ejecutarlo obtenemos:

  • Los 10 primeros resultados para cada las keyword_a y keyword_b introducidas.
  • Los resultados que coinciden para ambas keywords.

Nota: Yo lo he estado corriendo en Jupyter Notebooks porque me parece eficiente y sencillo, pero puedes correrlo en el entorno de tu preferencia.

Import requests
from bs4 import BeautifulSoup
from urllib.parse import quote_plus, urldefrag

def obtener_urls(keyword, limit=10):
    keyword_encoded = quote_plus(keyword)
    search_url = f"https://www.google.com/search?q={keyword_encoded}&num={limit}&gl=es&hl=es"
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'
    }

    response = requests.get(search_url, headers=headers)
    if response.status_code == 200:
        soup = BeautifulSoup(response.text, 'html.parser')
        search_results = soup.find_all('div', class_='tF2Cxc')

        urls = []
        for result in search_results:
            link = result.find('a', href=True)
            if link:
                # Limpia el fragmento de la URL antes de agregarla a la lista
                url_limpia = urldefrag(link['href']).url
                urls.append(url_limpia)

        return urls
    else:
        print("Error en la solicitud")
        return []

def comparar_keywords(keyword1, keyword2, limit=10):
    urls_keyword1 = obtener_urls(keyword1, limit)
    urls_keyword2 = obtener_urls(keyword2, limit)

    urls_comunes = set(urls_keyword1).intersection(set(urls_keyword2))

    print(f"URLs comunes entre '{keyword1}' y '{keyword2}' ({len(urls_comunes)}):")
    for url in urls_comunes:
        print(url)
    
    print(f"\nURLs para '{keyword1}':")
    for url in urls_keyword1:
        print(url)
    
    print(f"\nURLs para '{keyword2}':")
    for url in urls_keyword2:
        print(url)

# Ejemplo de uso
keyword_a = 'cuanto cuesta estudiar medicina en costa rica'
keyword_b = 'precio estudiar medicina en costa rica'
comparar_keywords(keyword_a, keyword_b, limit=10)

Para que entiendas las salidas te pongo un ejemplo. Las keywords introducidas son “estudiar medicina en costa rica” y “precio estudiar medicina en costa rica”. En total coinciden 7 URLs en ambas SERPs, lo que nos da una coincidencia del 70% y por tanto la misma intención de búsqueda.

Ejemplo de salida para el código python comparador de SERPs

Antes de utilizarlo… ajusta la localización e idioma de la búsqueda y el número de resultados

Antes de irme, decirte que el script está configurado para las SERPs de España, pero puedes cambiar la ecuación de búsqueda.

search_url = f"https://www.google.com/search?q={keyword_encoded}&num={limit}&gl=es&hl=es"

Al final de la ecuación tenemos dos atributos introducidos por &:

&gl=es. Especifica la localización geográfica de la búsqueda. En este caso, es indica que los resultados deben ser más relevantes para España. En el ejemplo mostrado este matiz es de importante relevancia ya que al ser una keyword con la entidad ‘Costa Rica’, el algoritmo podría tener en cuenta la SERP de este país.

&hl=es. Determina el idioma de la interfaz del usuario de Google para darle prioridad a los contenidos en español.

También, añadir que se puede comparar el número de resultados analizado. En este caso, se contemplan las 10 primeras posiciones, pero podría modificarse sin ningún problema. Tan solo habría que cambiar el valor del atributo limit=10 por el número de resultados que se desee.

Considero que esto es lo único reseñable, y que el resto del script tira solo. Sin embargo, si tienes alguna pregunta concreta sobre el código puedes dejármelo en los comentarios. Espero que te sirva.

1 comentario en “Cómo comparar SERPs con Python”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *