Formatos y fuentes de datos 7 min de lectura

Parseo de RSS: cómo extraer datos de los feeds y para qué sirve

Parseo de feeds RSS y Atom: estructura de los formatos, bibliotecas listas para usar y monitorización de noticias y blogs sin rastrear páginas.

EW
Equipo Web-Scraping.es
Recopilación de datos para las necesidades del negocio
Publicado: 29 abril 2025

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;
  • description o summary: la descripción breve;
  • pubDate o updated: la fecha de publicación;
  • guid o id: 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>:

html
<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:

code
/rss
/rss.xml
/feed
/feed.xml
/feeds
/atom.xml
/index.xml
/rss/all.xml

Conviene 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 .rss a 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.

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.

javascript
// 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
<?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
// 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.

ruby
# 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}"
end

Escollos 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/id ya 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 ETag y Last-Modified para 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.