RSS é uma das formas mais subestimadas e, ao mesmo tempo, mais práticas de obter dados de sites. Enquanto todo mundo debate o scraping «complexo», com JavaScript e captchas pelo caminho, milhares de sites entregam tranquilamente seu conteúdo em forma de XML limpo e estruturado. Basta saber onde procurar e como ler.
Neste artigo, veremos o que é RSS, para que serve seu parsing, como localizar os feeds de um site e como implementar a leitura deles em diferentes linguagens de programação.
O que é RSS e por que é tão prático de parsear
RSS (Really Simple Syndication) é um formato XML padronizado no qual um site publica a lista de seus materiais recentes: títulos, links, descrições curtas, datas de publicação e, às vezes, o texto completo e os anexos. Ao lado dele existe um formato parecido, o Atom, que resolve a mesma tarefa e só se diferencia em detalhes da marcação.
A diferença fundamental entre o RSS e o parsing de HTML comum é que a estrutura do feed é previsível e estável. Não é preciso se agarrar a classes CSS que vão mudar no próximo redesign. Os campos são os mesmos em toda parte:
title: o título;link: o link para o material;descriptionousummary: a descrição curta;pubDateouupdated: a data de publicação;guidouid: o identificador único da entrada.
Isso torna o RSS o ponto de entrada ideal quando o site oferece um desses feeds.
Para que serve o parsing de RSS
Os cenários de uso são muitos, e nem todos são evidentes:
Agregadores de notícias e conteúdo. O caso mais clássico: reunir em um só lugar as publicações de dezenas de fontes. É assim que funcionam os leitores de feeds, as newsletters temáticas e os veículos de nicho.
Monitoramento de menções e tendências. Acompanhar o surgimento de palavras-chave (o nome da empresa, da marca ou de uma pessoa) nos feeds de veículos de imprensa e blogs quase em tempo real, sem atrasos nem varreduras manuais pelos sites.
Alimentação de conteúdo e automação. Publicação automática em redes sociais e canais do Telegram, atualização de vitrines, preparação de planos de conteúdo: tudo isso pode ser construído sobre os dados frescos dos feeds.
Inteligência competitiva. Muitas empresas mantêm blogs com RSS. Assinando-os de forma programática, você fica sabendo primeiro de lançamentos, artigos e anúncios.
Dados para análise e ML. Os feeds RSS são uma fonte barata e limpa de textos para treinar modelos, analisar sentimento, agrupar temas e construir grafos de notícias.
Notificações. Alertas pessoais sobre novas vagas de emprego, anúncios, publicações em fóruns ou atualizações de documentação.
A grande vantagem sobre o scraping de HTML é a rapidez de desenvolvimento, a estabilidade e a carga baixa, tanto para você quanto para a fonte.
Como encontrar sites e feeds RSS
Muitos sites publicam RSS, mas não colocam o botão em lugar visível. Estas são as formas que funcionam para localizar o feed.
1. A metatag no código HTML da página
Os sites bem configurados declaram o feed no <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 abrir o código-fonte da página (Ctrl+U) e procurar application/rss+xml ou application/atom+xml. Essa mesma tag pode ser extraída de forma programática para a detecção automática de feeds.
2. Caminhos de URL típicos
Uma parte enorme dos feeds vive em caminhos previsíveis. Vale conferi-los um a um:
/rss
/rss.xml
/feed
/feed.xml
/feeds
/atom.xml
/index.xml
/rss/all.xmlConvém conhecer, além disso, as plataformas populares:
- WordPress:
/feed/,/?feed=rss2; para uma categoria:/category/nome/feed/; - Blogger:
/feeds/posts/default; - YouTube:
https://www.youtube.com/feeds/videos.xml?channel_id=ID_DO_CANAL; - Reddit: dá para acrescentar
.rssa qualquer seção, por exemplo/r/programming.rss; - Substack / Medium:
/feed.
3. Operadores de busca e serviços
No buscador, ajudam consultas do tipo site:example.com rss ou inurl:feed site:example.com. Existem também serviços de detecção de feeds (por exemplo, RSS.app ou Feedly) que encontram sozinhos os feeds disponíveis a partir do endereço do site. E, se não existir nenhum feed oficial, algumas ferramentas geram RSS a partir de páginas HTML comuns, embora isso já se aproxime do scraping clássico.
Exemplos de implementação em várias linguagens
A seguir, exemplos mínimos e funcionais de leitura de um feed. Todos usam bibliotecas consagradas, que parseiam tanto RSS quanto Atom e poupam a dor de cabeça das diferentes versões do padrão.
Python
A biblioteca feedparser é o padrão de facto do ecossistema Python.
# pip install feedparser
import feedparser
feed = feedparser.parse("https://example.com/feed.xml")
print(f"Fonte: {feed.feed.get('title', 'sem título')}")
for entry in feed.entries:
print("—" * 40)
print("Título: ", entry.get("title"))
print("Link: ", entry.get("link"))
print("Data: ", entry.get("published", "desconhecida"))
print("Resumo: ", entry.get("summary", "")[:200])O feedparser normaliza os campos por conta própria, então entry.title e entry.link ficam disponíveis independentemente de se tratar de RSS ou de Atom.
JavaScript / Node.js
O pacote rss-parser se integra bem com 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(`Fonte: ${feed.title}`);
feed.items.forEach((item) => {
console.log("—".repeat(40));
console.log("Título:", item.title);
console.log("Link:", item.link);
console.log("Data: ", item.pubDate);
});
}
readFeed("https://example.com/feed.xml").catch(console.error);PHP
No PHP existe a biblioteca SimplePie, embora para tarefas básicas baste o SimpleXML integrado.
<?php
// Opção sem dependências: o SimpleXML integrado
$feed = simplexml_load_file("https://example.com/feed.xml");
echo "Fonte: " . $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 "Link: " . $item->link . PHP_EOL;
echo "Data: " . $item->pubDate . PHP_EOL;
}Para produção, é melhor usar o SimplePie (composer require simplepie/simplepie): ele traz cache, processa Atom e aguenta bem o XML «sujo».
Go
No ecossistema Go é popular o gofeed, que entende os dois formatos ao mesmo tempo.
// 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("Fonte:", feed.Title)
for _, item := range feed.Items {
fmt.Println("————————————————")
fmt.Println("Título:", item.Title)
fmt.Println("Link:", item.Link)
fmt.Println("Data: ", item.Published)
}
}Ruby
A gem feedjira resolve a tarefa com pouquíssimo código.
# gem install feedjira
require "feedjira"
require "httparty"
xml = HTTParty.get("https://example.com/feed.xml").body
feed = Feedjira.parse(xml)
puts "Fonte: #{feed.title}"
feed.entries.each do |entry|
puts "—" * 40
puts "Título: #{entry.title}"
puts "Link: #{entry.url}"
puts "Data: #{entry.published}"
endArmadilhas que convém ter em mente
O parsing de RSS é simples, mas no trabalho real afloram nuances:
- Deduplicação. Uma mesma entrada chega ao feed várias vezes. Guarde os
guid/idjá processados para não duplicar materiais. - Conteúdo incompleto. Muitas vezes o feed entrega só a chamada, não o texto completo. Nesse caso, será preciso baixar também a página do link e parseá-la.
- Codificações e XML «sujo». Nem todos os feeds são válidos. As boas bibliotecas perdoam os erros; os parsers caseiros, não.
- Frequência de consulta. Não bombardeie o feed a cada segundo. Respeite os cabeçalhos
ETageLast-Modifiedpara não baixar a mesma coisa repetidamente nem acabar bloqueado. - Limites do feed. Normalmente um RSS entrega só as últimas 10-50 entradas. O histórico não se coleta assim: é preciso manter um arquivo próprio ou um monitoramento contínuo com acumulação.
- Escala. Quando as fontes se contam às centenas, aparecem o agendador, as filas, o monitoramento dos feeds «caídos» e o armazenamento. Um script simples vira uma infraestrutura inteira.
Quando vale deixar o trabalho com profissionais
Ler um feed é coisa de cinco minutos. Agora, montar um fluxo estável de notícias a partir de centenas de fontes, unificar formatos heterogêneos em uma estrutura comum e garantir deduplicação, download do texto completo, limpeza e funcionamento ininterrupto 24/7 já é um desafio sério de engenharia.
Se o que você precisa é do resultado pronto, e não de manter seu próprio pipeline de extração, conheça nosso serviço de extração de artigos de imprensa. Nós cuidamos de localizar e conectar as fontes (incluindo os sites sem RSS visível), normalizar os dados, filtrá-los pelos seus temas e palavras-chave e entregar um fluxo de notícias limpo e estruturado no formato que for melhor para você: via API, por dumps ou com integração direta no seu sistema. Você recebe os dados prontos; da rotina de feeds, codificações e fontes instáveis cuidamos nós.
RSS continua sendo uma das formas mais eficientes de obter dados onde ele está disponível: estrutura previsível, carga baixa e desenvolvimento rápido. Comece procurando os feeds dos sites que interessam e teste os exemplos acima na sua linguagem; e, quando a tarefa ultrapassar os limites de um script, você já sabe a quem recorrer.