Extraer datos de Google Suggest a escala

En esta entrada hablo de:

COMPARTE ESTA ENTRADA:

Si trabajas como consultor SEO, una de tus misiones es entender cómo evoluciona el mercado para adaptar tu estrategia. ¿Por qué? Ya que es más fácil obtener resultados si llegamos primero y siempre debemos adaptarnos a los cambios de comportamiento de nuestros clientes.

Existen varias herramientas para ayudarnos en esta tarea, sin embargo solemos pasar por alta la más obvia: Google Suggestions. 

¿Qué es Google Suggest? 

Todo el mundo está usando Google Suggest, la mayoría sin saberlo. Cuando empiezas a buscar algo en Google, suelen aparecer sugestiones que se basan en:

  • La versión de Google que usas
  • Tu idioma
  • Tu historial
Pero también toma en cuenta las tendencias actuales. Escribo este artículo horas después del anuncio de la potencial creación de la superliga. Y mira lo que aparece si indico “uefa”: 

Aunque ninguna herramienta indicará un volúmen de búsqueda interesante para esta búsqueda, sé que tendrá bastante a lo largo de los próximos días. Google también, por eso me lo sugiere. 

Es interesante, pero extraer datos de esta herramienta de forma manual puede resultar tedioso. Es verdad, sin embargo existe una API que nos permite acelerar un poco el proceso. ¿Lo mejor? Se puede scrapear sin necesidad de configuración compleja. 

TL;DR

Si no te interesa saber cómo realizar esta extracción y te interesa únicamente el resultado, puedes acceder directamente al Google Colab que he creado y seguir las instrucciones de uso

Si te interesa conocer los detalles del código (hecho en Python), puedes seguir leyendo. 

Explicación del código 

El código es bastante sencillo, pero te voy a explicar cada uno de los pasos para que se entienda y que lo puedas adaptar si deseas. 

Cargar librerías

Primero, tenemos que cargar las diferentes librerías. Algunas son bastante conocidas (Pandas, Requests, JSON y BeautifulSoup) y puedes encontrar tutoriales en internet sin problema. La única funcionalidad no tan común que uso es la función ascii_lowercase de la librería string, que me permite crear fácilmente una lista con las diferentes letras del alfabeto.

¿Por qué lo necesito? Esto lo entenderás en una de las siguientes secciones. Para que sepas, esta lista no contiene la ñ del idioma español.

#load libraries
import pandas as pd 
import requests
from bs4 import BeautifulSoup
from string import ascii_lowercase
import json 

Indicar la palabra clave inicial y el país

La API de Google Suggest funciona únicamente si le indicas una palabra, para que te devuelva sugestiones. Por lo mismo, necesitas indicar una. En el Google Colab (que te he compartido al inicio del artículo), verás que puedes, como usuario y sin modificar el código, indicar la palabra que quieras.

Es posible gracias al #@param {type:»string»} que incluyo al final de cada una de las líneas. Indica a Google Colab que el usuario puede modificar el valor de esta variable. Puedes consultar más información sobre esta funcionalidad aquí.

#Get input from users
seed_kw = "como taladrar" #@param {type:"string"}
country = "es" #@param {type:"string"}

Extraer sugestiones

Esta parte permite extraer las sugestiones usando la API de Google Suggest.

¿Qué hace exactamente?

  1. Crea una lista de palabras clave, agregando las letras del alfabeto después de tu palabra inicial. Si indicas zapatos, obtendrás zapatos a, zapatos b etc…
  2. Agrega a esta misma lista, y siguiendo la misma lógica, tu palabra clave seguida de los números del 0 al 10
  3. Extrae las palabras clave devueltas por la API de Google Suggest para cada una de estas combinaciones

¿Por qué sigo este proceso? Simplemente porque la API de Google Suggest devuelve como mucho 10 sugestiones. Y si agregamos letras / número después de tu palabra inicial, permite obtener más sugestiones en una sola ejecución.

#convert seed keyword to list
keywords = [seed_kw]
#create aditionnal seeed by appending a-z & 0-9 to it
for c in ascii_lowercase:
  keywords.append(seed_kw+' '+c)
for i in range(0,10):
  keywords.append(seed_kw+' '+str(i))

#gett all suggestions from Google
sugg_all = []
i=1

for kw in keywords:
  r = requests.get('http://suggestqueries.google.com/complete/search?output=toolbar&hl={}&q={}'.format(country,kw))
  soup = BeautifulSoup(r.content, 'html.parser')
  sugg = [sugg['data'] for sugg in soup.find_all('suggestion')]
  sugg_all.extend(sugg)

Extraer los volúmenes de búsqueda

Al inicio de este artículo, te mencionaba que el volúmenes de búsqueda no siempre nos sirve. Es verdad, pero a veces puede ser interesante disponer de esta información. Al final, también puedes extraer datos de Google Suggest para desarrollar la arquitectura de un E-commerce.

Existen muchas API que te permite extraer este dato, pero para este tutorial he decido usar la que propone Keyword Surfer porque:

  • Es gratis
  • No pide clave (crear cuenta)
  • No tiene muchas limitaciones
  • Permite extraer volúmenes para hasta 50 palabras en una sola petición

Ahora, no es perfecta, especialmente para palabras con un volumen de búsqueda inferior a 50 búsquedas mensuales, pero lo puedes reemplazar por otra API si lo deseas. Esta parte del código extrae el volumen de búsqueda de cada una de las sugestiones devueltas por la API de Google Suggest, para el país que indicaste en la etapa 2.

#remove duplicated
sugg_all = pd.Series(sugg_all).drop_duplicates(keep='first')
if len(sugg_all)==0:
  print('There are no suggestion. The script can\'t work :(')
  
#get search volume data 
#prepare keywords for encoding
data = sugg_all.str.replace(' ','%20').unique()
#divide kws into chunks of kws
chunks = [data[x:x+25] for x in range(0, len(data), 25)]

#create dataframe to receive data from API
results = pd.DataFrame(columns=['keyword','volume'])

#get data 
for chunk in chunks:
  url = (
      'https://db2.keywordsur.fr/keyword_surfer_keywords?country={}&keywords=[%22'.format(country)+
      '%22,%22'.join(chunk)+
      '%22]'
  )

  r = requests.get(url)
  data = json.loads(r.text)

  for key in data.keys():
    results.loc[len(results)] = [key,data[key]['search_volume']]

Guardar los resultados

¡Ya estamos llegando al final! Solo nos falta indicar cuando una palabra no tiene búsquedas (por defecto, la API de Surfer no incluye las palabras con un volumen de 0) y guardar el resultado en un CSV que podremos usar después en Google Sheets o Excel.

¡Fácil y rápido!

results = (
    sugg_all
    .to_frame()
    .rename({0:'keyword'},axis=1)
    .merge(results,on='keyword',how='left')
    .fillna(0)
)

results.sort_values(by='volume',ascending=False).to_csv('data.csv',index=False)
COMPARTE ESTA ENTRADA: