Como Construir um Raspador de Notícias: Um Guia Passo a Passo
Lead Scraping Automation Engineer
TL;DR:
- Um crawler de notícias é formado por dois loops: descobrir e depois buscar. Extraia links de artigos a partir de uma página inicial de seção, visite cada link e extraia o título e o corpo — mantenha as duas etapas separadas para que cada uma possa ser reexecutada, controlada e escalada de forma independente.
- A descoberta é um problema de filtragem de links. Uma página inicial é principalmente de navegação; os links dos artigos correspondem a um formato de URL reconhecível (
/news/articles/…, um slug que termina em um id). Filtre para esses em vez de capturar cada âncora. - Extração significa o núcleo legível, não todo o DOM. Leia o
h1e os parágrafos do artigo; ignore navegação, links relacionados e anúncios. A contagem de parágrafos e o comprimento do texto informam instantaneamente se a busca realmente obteve a história. - Sites de notícias geo-roteiam e limitam a taxa. Defina
proxyCountrye controle o ritmo da busca para que um varrimento de seção não acione limites anti-bot no meio do caminho. - Funciona no Scrapeless Scraping Browser com Puppeteer simples. O navegador em nuvem renderiza páginas iniciais construídas em JS e fornece saída residencial; seu código de crawler é uma navegação e extração comuns.
- Gratuito para começar. Novas contas Scrapeless incluem execução gratuita do Scraping Browser — inscreva-se em app.scrapeless.com.
Introdução: o que um crawler de notícias realmente faz
Um crawler de notícias transforma uma página inicial de seção em um fluxo de artigos estruturados. Ele realiza duas tarefas distintas. Primeiro, descoberta: leia a página inicial (ou uma seção, ou um sitemap) e colete os links que apontam para histórias reais. Em segundo lugar, busca: visite cada história e extraia o título e o corpo legível, descartando a navegação e os anúncios.
Manter essas duas etapas separadas é o truque. A descoberta é executada uma vez por varrimento e é barata; a busca é executada uma vez por artigo e é onde o verdadeiro trabalho — e o risco de limite de taxa — acontece. Separá-las permite que você colete primeiro uma lista limpa de links, depois busque a um ritmo controlado e re-busque um único artigo sem re-crawler a página inicial.
Este guia constrói o crawler em Node no Scrapeless Scraping Browser — um navegador de nuvem anti-detecção conectado ao Puppeteer por meio de um ponto de extremidade padrão. As etapas de descoberta e extração abaixo foram executadas contra fontes de notícias ao vivo. Apenas conteúdo público.
O Que Você Pode Fazer Com Isso
- Varrer uma seção (mundo, negócios, tecnologia) em busca dos novos artigos do dia.
- Extrair corpos de artigos limpos — título mais parágrafos — para análise ou um pipeline de leitura.
- Alimentar um resumidor ou armazenamento RAG com o texto legível em vez de HTML bruto.
- Acompanhar um tema reexecutando a descoberta em um cronograma e buscando apenas links novos.
- Cruzar fontes apontando o mesmo crawler para várias plataformas.
Por Que Scrapeless Scraping Browser
Scrapeless Scraping Browser é um navegador de nuvem personalizável, anti-detecção, projetado para crawlers da web e agentes de IA. Para um crawler de notícias especificamente, ele oferece:
- Renderização de JS do lado da nuvem — páginas iniciais modernas constroem suas listas de links com JavaScript; o navegador em nuvem executa isso para que os links existam.
- Proxies residenciais em mais de 195 países — fixe a saída para a região que um site atende e evite que a varredura de seção acione a limitação de taxa.
- Impressão digital anti-deteção — a busca se comporta como um navegador real, então as páginas de artigos continuam sendo renderizadas ao longo de um longo período.
- Conexão padrão com Puppeteer —
Puppeteer.connect()retorna umBrowsernormal; descoberta e extração são Puppeteer comum. - Persistência de sessão — mantenha uma sessão ativa durante toda a varredura.
Obtenha sua chave de API no plano gratuito em app.scrapeless.com.
Pré-requisitos
- Node.js 18 ou mais recente
- Uma conta Scrapeless e chave de API — inscreva-se em app.scrapeless.com
- Familiaridade básica com Puppeteer
Instalação
bash
npm install @scrapeless-ai/sdk puppeteer-core
bash
export SCRAPELESS_API_KEY="seu_token_api_aqui"
Etapa 1 — Conectar
javascript
import { Puppeteer } from '@scrapeless-ai/sdk';
const browser = await Puppeteer.connect({
apiKey: process.env.SCRAPELESS_API_KEY,
sessionName: 'crawler-de-notícias',
proxyCountry: 'US',
sessionTTL: 300,
});
const page = await browser.newPage();
Etapa 2 — Descobrir links de artigos
Carregue a página inicial e colete os links que parecem ser artigos. O seletor certo depende do site, mas o princípio é o mesmo em todos os lugares: filtre as âncoras até aquelas que apontam para histórias. Aqui está a página inicial de uma fonte de notícias, pegando os primeiros links de título:
javascript
await page.goto('https://text.npr.org/', {
waitUntil: 'domcontentloaded',
timeout: 40000,
});
const links = await page.evaluate(() =>
[...document.querySelectorAll('ul li a')]
.map((a) => ({ title: a.textContent.trim(), href: a.href }))
.filter((l) => l.title),
);
javascript
console.log(links.length, 'links —', links[0]);
// 5 links — { título: '...', href: 'https://text.npr.org/<article-id>' }
Para a maioria dos veículos, você aperta o filtro para um formato de URL — por exemplo, links cujo caminho corresponde a /news/articles/ ou termina em um longo id numérico — assim, links de navegação e seção são excluídos:
javascript
const articleLinks = await page.evaluate(() =>
[...document.querySelectorAll('a[href]')]
.filter((a) => /\/news\/(articles\/|[a-z]+-\d{6,})/.test(a.getAttribute('href') || ''))
.map((a) => a.href),
);
Passo 3 — Buscar e extrair cada artigo
Agora visite cada link e extraia o núcleo legível — o h1 e os parágrafos do corpo. Uma contagem de parágrafos e comprimento do texto são um rápido verificador de integridade de que você obteve uma história e não um redirecionamento ou um stub de paywall:
javascript
async function fetchArticle(page, url) {
await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 40000 });
return page.evaluate(() => ({
title: document.querySelector('h1')?.textContent?.trim(),
paragraphs: document.querySelectorAll('p').length,
text: [...document.querySelectorAll('p')].map((p) => p.textContent).join('\n\n'),
}));
}
const article = await fetchArticle(page, links[0].href);
console.log(article.title, '—', article.paragraphs, 'parágrafos');
// "EUA e Irã anunciam um acordo para acabar com a guerra, reabrir o Estreito de Ormuz" — 40 parágrafos
Essa execução ao vivo retornou um artigo de 40 parágrafos (~5.500 caracteres de texto do corpo) do link do título — título e texto completo, sem chrome de navegação.
Obtenha sua chave de API no plano gratuito: app.scrapeless.com
Passo 4 — Montar o rastreamento
Junte as duas etapas: descubra uma vez, depois busque cada link a um ritmo controlado. Mantenha um conjunto seen para que uma nova execução agendada busque apenas novas histórias:
javascript
const seen = new Set();
const articles = [];
for (const url of articleLinks) {
if (seen.has(url)) continue;
seen.add(url);
try {
articles.push({ url, ...(await fetchArticle(page, url)) });
} catch {
// pule um artigo que não irá renderizar; a varredura continua
}
await new Promise((r) => setTimeout(r, 1000)); // mantenha o ritmo do rastreamento
}
await browser.close();
console.log(articles.length, 'artigos');
O Que Você Recebe de Volta
Cada artigo é um registro simples — título mais corpo legível:
json
{
"url": "https://text.npr.org/nx-s1-5858590",
"title": "EUA e Irã anunciam um acordo para acabar com a guerra, reabrir o Estreito de Ormuz",
"paragraphs": 40,
"text": "..."
}
// amostra ilustrativa — título + contagem de parágrafos são uma captura real; texto do corpo cortado.
Algumas observações honestas:
- Aperte o filtro de descoberta por site. Um filtro solto puxa navegação e tags; combine com a forma da URL do artigo.
- Valide a busca. Uma contagem de parágrafos quase zero geralmente significa um redirecionamento, um paywall ou uma parede de consentimento — verifique antes de confiar no registro.
- Remova duplicatas nas varreduras. Páginas principais relistam a mesma história; foque na URL.
- Mantenha o ritmo e fixe. Um atraso entre as buscas e um
proxyCountryfixo mantêm uma busca de seção evitando limites de taxa.
Conclusão: descobrir, buscar, repetir
Um rastreador de notícias é dividido em duas etapas limpas — descubra os links dos artigos a partir de uma página principal, depois busque e extraia o título e o corpo de cada história. Mantê-los separados torna o rastreamento controlável, reutilizável e fácil de programar. Rodar no Scrapeless Scraping Browser renderiza as páginas principais construídas em JS e fornece a saída residencial que evita que uma varredura seja limitada por taxas. Para a parte de múltiplas páginas do rastreamento, veja o guia de paginação; a página do produto Scraping Browser e documentos cobrem toda a superfície do SDK. Filtre a descoberta rigidamente, valide cada busca, remova duplicatas nas varreduras e mantenha o ritmo do rastreamento.
Pronto para Criar Seu Pipeline de Dados Potencializado por IA?
Junte-se à nossa comunidade para reivindicar um plano gratuito e conectar-se com desenvolvedores que constroem pipelines de notícias e conteúdo: Discord · Telegram.
Inscreva-se em app.scrapeless.com para obter a execução gratuita do Scraping Browser e adapte os padrões acima aos veículos e seções que seu fluxo de trabalho precisa. Veja preços para escala.
FAQ
Q: Rastrear sites de notícias é legal?
Coletar conteúdo visível ao público é geralmente permitido, mas os direitos autorais e os Termos de Serviço de cada site regulam o que você pode armazenar e republicar. Rasteje páginas públicas, respeite as regras de exclusão de robôs e ToS, e consulte um advogado para o seu caso de uso.
P: Como separo links de artigos da navegação?
Filtre âncoras para a forma da URL do artigo do site — um caminho /news/articles/ ou um slug terminando em um id longo — em vez de pegar todos os links na página.
P: Como sei se o artigo foi realmente buscado?
Verifique a contagem de parágrafos e o comprimento do texto. Uma contagem próxima de zero sinaliza um redirecionamento, paywall ou parede de consentimento em vez de uma história.
P: Preciso de um proxy?
Para um rastreamento contínuo, sim — fixe proxyCountry na região que o veículo atende e ajuste o ritmo do rastreamento para não ultrapassar os limites de taxa.
P: Como faço para executar isso em um cronograma apenas para novas histórias?
Mantenha um conjunto seen de URLs persistente; execute novamente a descoberta no seu intervalo e busque apenas os links que você não registrou.
P: Posso executar isso sem um agente de IA?
Sim. É apenas o Puppeteer sobre a sessão Scrapeless — nenhum agente necessário.
Na Scorretless, acessamos apenas dados disponíveis ao público, enquanto cumprem estritamente as leis, regulamentos e políticas de privacidade do site aplicáveis. O conteúdo deste blog é apenas para fins de demonstração e não envolve atividades ilegais ou infratoras. Não temos garantias e negamos toda a responsabilidade pelo uso de informações deste blog ou links de terceiros. Antes de se envolver em qualquer atividade de raspagem, consulte seu consultor jurídico e revise os termos de serviço do site de destino ou obtenha as permissões necessárias.



