Extraer las entidades más repetidas de varias URLs con Python y TextRazor

Imagen de Alberto Fernández - Consultor SEO Senior
Alberto Fernández - Consultor SEO Senior

Actualizado el: noviembre 10, 2025

4 min de lectura
Tabla de contenidos

En SEO, entender qué entidades están presentes en un contenido es clave para mejorar la relevancia semántica, optimizar el enlazado interno y descubrir nuevas oportunidades de contenido.

En este artículo te voy a enseñar un script en Python que analiza varias URLs, extrae el texto de cada una, identifica sus entidades y te devuelve las 40 más repetidas, filtrando números y ruido.


¿Qué hace este script?

  1. Lee un listado de URLs (pegadas en consola, separadas por espacios o comas).
  2. Descarga el contenido HTML de cada URL con requests.
  3. Limpia el HTML (quitando <script>, <style>, etc.) usando BeautifulSoup.
  4. Envía el texto a la API de TextRazor para extraer entidades.
  5. Filtra números y repeticiones para quedarte con entidades útiles.
  6. Cuenta las apariciones de cada entidad y devuelve las 40 más frecuentes en formato de texto separado por comas.

El código


# pip install textrazor requests beautifulsoup4

import re
import sys
from collections import Counter
from urllib.parse import urlparse

import requests
from bs4 import BeautifulSoup
import textrazor

# Clave API de TextRazor
textrazor.api_key = «AQUI_TU_API_KEY»

# Expresión regular para filtrar entidades con letras (evitar números)
ALPHA_RE = re.compile(r»[A-Za-zÁÉÍÓÚÜÑáéíóúüñ]»)

def fetch_text(url, timeout=20):
«»»Descarga y limpia el texto de una URL.»»»
headers = {«User-Agent»: «Mozilla/5.0 (compatible; EntityCollector/1.0)»}
r = requests.get(url, headers=headers, timeout=timeout)
r.raise_for_status()
soup = BeautifulSoup(r.text, «html.parser»)
for tag in soup([«script», «style», «noscript», «template»]):
tag.decompose()
return soup.get_text(» «, strip=True)[:100_000] # límite para API

def extract_entities_from_text(text, language=»spa»):
«»»Extrae entidades de un texto usando TextRazor.»»»
client = textrazor.TextRazor(extractors=[«entities»])
client.set_language_override(language)
resp = client.analyze(text)
names = []
for ent in resp.entities() or []:
name = (ent.matched_text or «»).strip()
if not name or not ALPHA_RE.search(name):
continue
occurrences = len(getattr(ent, «starting_positions», []) or [1])
names.extend([name] * occurrences)
return names

def main():
raw = input(«Pega las URLs separadas por comas o espacios: «).strip()
parts = re.split(r»[,\s]+», raw)
urls = [u if «://» in u else «https://» + u for u in parts if u]

counts = Counter()
first_seen_case = {}

for url in urls:
try:
text = fetch_text(url)
for e in extract_entities_from_text(text):
k = e.lower()
if k not in first_seen_case:
first_seen_case[k] = e
counts[k] += 1
except Exception as e:
print(f»[AVISO] {url}: {e}», file=sys.stderr)

top = [first_seen_case[k] for k, _ in counts.most_common(40)]
print(«, «.join(top))

if __name__ == «__main__»:
main()

Requisitos previos

  1. Python 3.9+ instalado
  2. Instalar dependencias:
    pip install textrazor requests beautifulsoup4
  3. Registrarte en TextRazor y obtener una API Key.

Posibles usos para SEO

Este script no es solo un experimento técnico: puede ser una herramienta estratégica en cualquier auditoría o investigación SEO.

  1. Análisis de la competencia
    • Pega varias URLs de competidores y obtén de forma inmediata las entidades que más repiten.
    • Esto te muestra de qué hablan realmente, más allá de keywords exactas, y qué temas Google podría estar asociando con ellos.
  2. Optimización semántica de contenidos
    • Introduce tus propias URLs y verifica si las entidades relevantes para tu sector aparecen con suficiente frecuencia.
    • Si faltan, puedes integrarlas de forma natural para reforzar la temática y la relevancia.
  3. Detección de brechas de contenido (Content Gap)
    • Compara las entidades más repetidas en contenidos de competidores con las tuyas.
    • Aquellas que ellos trabajan y tú no, son oportunidades claras para nuevos artículos o actualizaciones.
  4. Planificación de clústers temáticos
    • A partir de las entidades comunes en un grupo de artículos, puedes definir subtemas y crear un clúster de contenidos interconectados.
    • Esto mejora la cobertura temática y la autoridad sobre un tema.
  5. Optimización del enlazado interno
    • Usa las entidades más recurrentes como nodos clave (hubs) de tu arquitectura interna.
    • Por ejemplo, si “inteligencia artificial” es frecuente, crea o refuerza una página pilar y enlaza desde todos los artículos que mencionan esa entidad.
  6. Monitoreo de cambios en la estrategia de un competidor
    • Ejecuta el script cada cierto tiempo sobre las mismas URLs o categorías.
    • Si empiezan a aparecer nuevas entidades relevantes, puede ser señal de un cambio en su enfoque o estrategia de contenidos.

Ejemplo de uso

Si analizamos 5 artículos de un competidor sobre IA y marketing, el script podría devolver:
Inteligencia artificial, Google, SEO, aprendizaje automático, búsqueda, ChatGPT, algoritmos, datos, contenido...
Con esa lista sabrías de un vistazo qué conceptos dominan en su contenido y podrías compararlos con el tuyo.

Imagen de Alberto Fernández
Alberto Fernández
Alberto es consultor SEO con más de 16 años de experiencia. Ha impulsado el crecimiento orgánico de decenas de empresas —desde pymes hasta grandes marcas— mediante estrategias técnicas, contenido orientado a negocio y auditorías avanzadas que han generado millones en visibilidad y facturación.

Tabla de contenidos