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

Escrito por Alberto Fernández. - 3 min de lectura

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.

Comparte este artículo