Last Updated on mayo 8, 2024 by Álvaro
Muchas veces los plugins SEO como Yoast SEO o Rank Math son bastante limitados a la hora de crear datos estructurados. Lo mismo sucede, a mi juicio, con los típicos generadores de schema que hay por internet. Por eso, yo soy de la escuela de crear el schema de manera artesanal. Aunque tardo más, esta es la única forma que tengo de asegurarme que se tratan las propiedades que considero relevante.
Pero no creáis que soy una especie de psicópata que crea cada fragmento de datos estructurados desde 0. Obviamente tengo plantillas. Pero cuando no las tengo… pues choriceo. Y para eso desarrollé este scraper, para tomar prestados los datos estructurados de aquellas webs que los utilizan de manera correcta y que utilizan las propiedades que considero necesarias.
El proceso que sigo es el siguiente:
- Identifico que schema necesito.
- Escaneo las SERPs donde presupongo que encontraré resultados con ese schema.
- Selecciono los resultados que me interesan.
- Verifico que el schema que utilizan sea correcto en la Prueba de resultados enriquecidos de Google o en el Validador de Schema.org.
- Le paso el scraper a la URL elegida y extraigo el código.
- Modifico los valores de las propiedades y los cargo en mi CMS de confianza. (Si queréis tutorial de como los incluyo a mano en mis posts de WordPress dejádmelo en comentarios 😁 )
El código en Python del scraper
Yo lo ejecuto a través de Jupyer Notebooks porque para mí es la manera más cómoda de trabajar con pequeños scripts de Python. Si no tienes mucha experiencia en el mundo de la programación, te recomiendo hacer lo mismo.
import requests from bs4 import BeautifulSoup import json def scrape_schema_org_data(url): # Paso 1: Obtener el HTML response = requests.get(url) html = response.text # Paso 2: Parsear el HTML soup = BeautifulSoup(html, 'html.parser') # Paso 3: Extraer los datos estructurados scripts = soup.find_all('script', type='application/ld+json') data_list = [] for script in scripts: try: data = json.loads(script.string) data_list.append(data) except json.JSONDecodeError: continue return data_list def pretty_print_json(data): # Imprime cada elemento JSON de la lista de manera bonita for item in data: print(json.dumps(item, indent=2, ensure_ascii=False)) # Prueba con una URL específica url = 'https://www.sanmiguel.com/es/cervezas/san-miguel-00/' data = scrape_schema_org_data(url) pretty_print_json(data)
El funcionamiento es muy sencillo. Tan solo sustituye la URL de ejemplo que presento en la variable URL (ubicada al final del script), por la URL que quieras scrapear. No necesitarás hacer nada más, una vez ejecutes el script, se pintará el schema de manera estructurada.
¿Cómo crees que se podría mejorar este script? Déjamelo en los comentarios.
Buenas Álvaro,
En primer lugar agradecerte el trabajo, me ha encantando tu recurso, pero la verdad que con temas de programación, soy torpe o nulo… y estoy haciendo pruebas pero no consigo obtener resultados…
Copio tu código y lo «lanzo» en Jupyter notebook o viscual code.. pero nada… no se si pudieras hacerme un mini resumen de como es el proceso..
¡Hola Oscar!
Necesitaría saber qué mensaje de error te sale.
Si has copiado y pegado directamente el código y no funciona, lo que podría estar pasando es que no tengas las librerías necesarias instaladas. Antes de ejecutar el código, escribe y ejecuta los siguientes comandos:
pip install requests
pip install beautifulsoup4
pip install lxml
Eso instalaría las librerías.
Si no lo consigues, escríbeme a cualquiera de mis redes sociales, puedes acceder desde el menú a la que te venga mejor.