RSS es una de las formas más infravaloradas y, al mismo tiempo, más cómodas de obtener datos de los sitios web. Mientras todo el mundo debate sobre el scraping «complejo», con JavaScript y captchas de por medio, miles de recursos entregan tranquilamente su contenido en forma de XML limpio y estructurado. Basta con saber dónde buscar y cómo leerlo.
En este artículo veremos qué es RSS, para qué sirve su parseo, cómo localizar los feeds de un sitio y cómo implementar su lectura en distintos lenguajes de programación.
Qué es RSS y por qué resulta tan cómodo de parsear
RSS (Really Simple Syndication) es un formato XML estandarizado en el que un sitio publica la lista de sus materiales recientes: titulares, enlaces, descripciones breves, fechas de publicación y, en ocasiones, el texto completo y los adjuntos. A su lado existe un formato parecido, Atom, que resuelve la misma tarea y solo se diferencia en detalles del marcado.
La diferencia clave entre RSS y el parseo de HTML corriente es que la estructura del feed es predecible y estable. No necesita aferrarse a clases CSS que cambiarán con el próximo rediseño. Los campos son los mismos en todas partes:
title: el titular;link: el enlace al material;descriptionosummary: la descripción breve;pubDateoupdated: la fecha de publicación;guidoid: el identificador único de la entrada.
Esto convierte a RSS en el punto de entrada ideal cuando el sitio ofrece uno de estos feeds.
Para qué sirve el parseo de RSS
Los escenarios de uso son muchos, y no todos resultan evidentes:
Agregadores de noticias y contenido. El caso más clásico: reunir en un solo lugar las publicaciones de decenas de fuentes. Así funcionan los lectores de feeds, los boletines temáticos y los medios de nicho.
Monitorización de menciones y tendencias. Seguir la aparición de palabras clave (el nombre de la empresa, la marca o una persona) en los feeds de medios y blogs casi en tiempo real, sin retrasos ni recorridos manuales por los sitios.
Alimentación de contenido y automatización. Publicación automática en redes sociales y canales de Telegram, actualización de escaparates, preparación de planes de contenido: todo eso puede construirse sobre los datos frescos de los feeds.
Inteligencia competitiva. Muchas empresas mantienen blogs con RSS. Si se suscribe a ellos de forma programática, será el primero en enterarse de lanzamientos, artículos y anuncios.
Datos para analítica y ML. Los feeds RSS son una fuente barata y limpia de textos para entrenar modelos, analizar el sentimiento, agrupar temas y construir grafos de noticias.
Notificaciones. Alertas personales sobre nuevas ofertas de empleo, anuncios, publicaciones en foros o actualizaciones de documentación.
La gran ventaja frente al scraping de HTML es la rapidez de desarrollo, la estabilidad y la baja carga, tanto para usted como para la fuente.
Cómo encontrar sitios y feeds RSS
Muchos sitios publican RSS, pero no colocan el botón en un lugar visible. Estas son las formas que funcionan para localizar el feed.
1. La metaetiqueta en el código HTML de la página
Los sitios bien configurados declaran el feed en el <head>:
<link rel="alternate" type="application/rss+xml" title="RSS" href="/feed.xml">
<link rel="alternate" type="application/atom+xml" title="Atom" href="/atom.xml">Basta con abrir el código fuente de la página (Ctrl+U) y buscar application/rss+xml o application/atom+xml. Esta misma etiqueta puede extraerse de forma programática para la detección automática de feeds.
2. Rutas de URL típicas
Una parte enorme de los feeds vive en rutas predecibles. Merece la pena comprobarlas una a una:
/rss
/rss.xml
/feed
/feed.xml
/feeds
/atom.xml
/index.xml
/rss/all.xmlConviene conocer, además, las plataformas populares:
- WordPress:
/feed/,/?feed=rss2; para una categoría:/category/nombre/feed/; - Blogger:
/feeds/posts/default; - YouTube:
https://www.youtube.com/feeds/videos.xml?channel_id=ID_DEL_CANAL; - Reddit: se puede añadir
.rssa cualquier sección, por ejemplo/r/programming.rss; - Substack / Medium:
/feed.
3. Operadores de búsqueda y servicios
En el buscador ayudan consultas del tipo site:example.com rss o inurl:feed site:example.com. Existen también servicios de detección de feeds (por ejemplo, RSS.app o Feedly) que encuentran por sí solos los feeds disponibles a partir de la dirección del sitio. Y si no existe ningún feed oficial, algunas herramientas generan RSS a partir de páginas HTML normales, aunque eso ya se acerca al scraping clásico.
Ejemplos de implementación en varios lenguajes
A continuación, ejemplos mínimos y funcionales de lectura de un feed. En todos se usan bibliotecas contrastadas que parsean tanto RSS como Atom y le ahorran el dolor de cabeza de las distintas versiones del estándar.
Python
La biblioteca feedparser es el estándar de facto del ecosistema Python.
# pip install feedparser
import feedparser
feed = feedparser.parse("https://example.com/feed.xml")
print(f"Fuente: {feed.feed.get('title', 'sin título')}")
for entry in feed.entries:
print("—" * 40)
print("Título: ", entry.get("title"))
print("Enlace: ", entry.get("link"))
print("Fecha: ", entry.get("published", "desconocida"))
print("Resumen:", entry.get("summary", "")[:200])feedparser normaliza los campos por su cuenta, así que entry.title y entry.link están disponibles con independencia de que se trate de RSS o de Atom.
JavaScript / Node.js
El paquete rss-parser se integra cómodamente con async/await.
// npm install rss-parser
import Parser from "rss-parser";
const parser = new Parser();
async function readFeed(url) {
const feed = await parser.parseURL(url);
console.log(`Fuente: ${feed.title}`);
feed.items.forEach((item) => {
console.log("—".repeat(40));
console.log("Título:", item.title);
console.log("Enlace:", item.link);
console.log("Fecha: ", item.pubDate);
});
}
readFeed("https://example.com/feed.xml").catch(console.error);PHP
En PHP existe la biblioteca SimplePie, aunque para tareas básicas basta con el SimpleXML integrado.
<?php
// Opción sin dependencias: el SimpleXML integrado
$feed = simplexml_load_file("https://example.com/feed.xml");
echo "Fuente: " . $feed->channel->title . PHP_EOL;
foreach ($feed->channel->item as $item) {
echo str_repeat("—", 40) . PHP_EOL;
echo "Título: " . $item->title . PHP_EOL;
echo "Enlace: " . $item->link . PHP_EOL;
echo "Fecha: " . $item->pubDate . PHP_EOL;
}Para producción es mejor usar SimplePie (composer require simplepie/simplepie): incorpora caché, procesa Atom y aguanta bien el XML «sucio».
Go
En el ecosistema Go es popular gofeed, que entiende ambos formatos a la vez.
// go get github.com/mmcdole/gofeed
package main
import (
"fmt"
"github.com/mmcdole/gofeed"
)
func main() {
fp := gofeed.NewParser()
feed, err := fp.ParseURL("https://example.com/feed.xml")
if err != nil {
panic(err)
}
fmt.Println("Fuente:", feed.Title)
for _, item := range feed.Items {
fmt.Println("————————————————")
fmt.Println("Título:", item.Title)
fmt.Println("Enlace:", item.Link)
fmt.Println("Fecha: ", item.Published)
}
}Ruby
La gema feedjira resuelve la tarea con muy poco código.
# gem install feedjira
require "feedjira"
require "httparty"
xml = HTTParty.get("https://example.com/feed.xml").body
feed = Feedjira.parse(xml)
puts "Fuente: #{feed.title}"
feed.entries.each do |entry|
puts "—" * 40
puts "Título: #{entry.title}"
puts "Enlace: #{entry.url}"
puts "Fecha: #{entry.published}"
endEscollos que conviene tener presentes
El parseo de RSS es sencillo, pero en el trabajo real afloran matices:
- Deduplicación. Una misma entrada llega al feed varias veces. Guarde los
guid/idya procesados para no duplicar materiales. - Contenido incompleto. A menudo el feed entrega solo el avance, no el texto completo. En ese caso tendrá que descargar además la página del enlace y parsearla.
- Codificaciones y XML «sucio». No todos los feeds son válidos. Las buenas bibliotecas perdonan los errores; los parsers caseros, no.
- Frecuencia de consulta. No bombardee el feed cada segundo. Respete las cabeceras
ETagyLast-Modifiedpara no descargar lo mismo una y otra vez ni acabar bloqueado. - Límites del feed. Normalmente un RSS entrega solo las últimas 10-50 entradas. El histórico no se recopila así: hace falta un archivo o una monitorización continua con acumulación.
- Escala. Cuando las fuentes se cuentan por centenares, aparecen el planificador, las colas, la monitorización de los feeds «caídos» y el almacenamiento. Un script sencillo se convierte en toda una infraestructura.
Cuándo conviene dejarlo en manos de profesionales
Leer un feed es cosa de cinco minutos. Ahora bien, montar un flujo estable de noticias desde cientos de fuentes, unificar formatos heterogéneos en una estructura común y garantizar la deduplicación, la descarga del texto completo, la limpieza y un funcionamiento ininterrumpido 24/7 ya es un reto de ingeniería serio.
Si lo que necesita es el resultado listo, y no mantener su propio pipeline de extracción, eche un vistazo a nuestro servicio de extracción de artículos de prensa. Nos encargamos de localizar y conectar las fuentes (incluidos los sitios sin RSS visible), normalizar los datos, filtrarlos por sus temas y palabras clave y entregarle un flujo de noticias limpio y estructurado en el formato que le convenga: vía API, mediante volcados o con integración directa en su sistema. Usted recibe los datos listos; de la rutina de feeds, codificaciones y fuentes inestables nos ocupamos nosotros.
RSS sigue siendo una de las formas más eficientes de obtener datos allí donde está disponible: estructura predecible, carga baja y desarrollo rápido. Empiece por buscar los feeds de los sitios que le interesan y pruebe los ejemplos de arriba en su lenguaje; y cuando la tarea desborde los límites de un script, ya sabe a quién acudir.