Formatos e fontes de dados 7 min de leitura

Parsing de RSS: como extrair dados dos feeds e para que serve

Parsing de feeds RSS e Atom: estrutura dos formatos, bibliotecas prontas para usar e monitoramento de notícias e blogs sem rastrear páginas.

EW
Equipe Web-Scraping.biz
Coleta de dados para as demandas do negócio
Publicado: 29 abril 2025

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;
  • description ou summary: a descrição curta;
  • pubDate ou updated: a data de publicação;
  • guid ou id: 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>:

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

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

Convé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 .rss a 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.

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.

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(`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
<?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
// 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.

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

Armadilhas 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/id já 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 ETag e Last-Modified para 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.