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

Tabla de contenidos
TÉRMINOS RELACIONADOS

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.

Descubre más