Como Raspagem do New York Times
Web Data Collection Specialist
TL;DR:
- Descubra artigos pelo formato da URL, não por uma classe CSS frágil. Cada link de história do New York Times segue o padrão
/YYYY/MM/DD/<seção>/<slug>.html. Combine esse padrão pela página e você coleta os verdadeiros artigos enquanto ignora navegação, promoções e elementos da seção. - A manchete é o próprio texto do link. Em uma página de seção, cada link de história envolve sua manchete, então
anchor.innerTextfornece um título limpo sem seletores extras. - Espere pelo DOM, não pela rede. A página do NYT mantém requisições em segundo plano, então
networkidle2pode travar; carregue comdomcontentloadede uma breve pausa em vez disso, e então leia a lista. - Páginas de seção são o ponto de entrada confiável.
/section/technology,/section/businesse o resto renderizam uma lista consistente de histórias atuais — uma melhor base do que a página inicial movimentada. - Manchetes e links públicos, não textos pagos. Isso coleta as manchetes listadas publicamente e URLs de artigos; o texto completo do artigo geralmente é medido, e ignorar um paywall está fora do escopo.
- Gratuito para começar. Novas contas Scrapeless incluem tempo de execução gratuito do Scraping Browser — inscreva-se em app.scrapeless.com.
Introdução: um feed de manchetes limpas a partir de uma página movimentada
Uma página de seção do New York Times é um feed editorial ao vivo — manchetes atuais e links de artigos sobre tecnologia, negócios, mundo e todas as outras editorias. Isso a torna uma fonte forte para monitoramento de mídia, rastreamento de tendências e fornecimento de links de histórias frescas para um rastreador subsequente. Obter isso de forma limpa é a parte difícil.
A página é renderizada em JavaScript e nunca realmente fica quieta — anúncios, análises e personalização continuam fazendo requisições, então um scraper que espera a rede ficar ociosa pode travar. A marcação também é com hash de classe (css-1u3p7j1 e amigos), então um seletor que você fixa hoje quebra na próxima implantação. O que fica estável é a estrutura da URL: cada artigo reside em um caminho datado que termina em .html.
Este guia executa um scraper de seção do NYT no Scrapeless Scraping Browser — um navegador em nuvem anti-detecção conectado ao Puppeteer — e descobre artigos por esse padrão de URL durável em vez de classes frágeis. Cada trecho abaixo foi executado contra uma página de seção ao vivo. Somente manchetes e links públicos.
O Que Você Pode Fazer Com Isso
- Construa um feed de seção — colete cada manchete atual e URL de artigo de uma editoria como Tecnologia ou Negócios.
- Monitore a cobertura de um tópico reexecutando a mesma seção em um cronograma e comparando os links.
- Inicie um crawler de texto completo com URLs de artigos limpos e deduplicados.
- Rastreie múltiplas editorias percorrendo várias páginas
/section/<name>. - Forneça a um agente de IA uma lista estruturada de histórias em vez de HTML bruto da página.
Por Que Scrapeless Scraping Browser
Scrapeless Scraping Browser é um navegador em nuvem personalizável e anti-detecção projetado para crawlers web e agentes de IA. Para o New York Times especificamente, ele oferece:
- Chromium auto-desenvolvido — renderiza o JavaScript que constrói a lista de histórias, de modo que os links existem no DOM.
- Impressão digital anti-detecção — a sessão é reconhecida como um navegador real, então evita as defesas contra tráfego automatizado e a página da seção serve normalmente.
- Proxies residenciais em mais de 195 países — fixe a saída dos EUA para que a página retorne sua edição padrão dos EUA.
- Persistência de sessão — mantenha uma sessão ativa através de várias seções.
- Uma conexão padrão com Puppeteer —
Puppeteer.connect()retorna umBrowsernormal; seu código de extração é um Puppeteer simples.
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"
Passo 1 — Conectar e carregar uma página de seção
Conecte-se ao navegador em nuvem com saída dos EUA, depois abra uma seção. Carregue com domcontentloaded e uma breve pausa — a página continua fazendo requisições em segundo plano, então esperar pela rede ficar completamente ociosa pode travar:
javascript
import { Puppeteer } from '@scrapeless-ai/sdk';
const browser = await Puppeteer.connect({
apiKey: process.env.SCRAPELESS_API_KEY,
sessionName: 'nyt-section',
proxyCountry: 'US',
sessionTTL: 300,
});
const page = await browser.newPage();
await page.goto('https://www.nytimes.com/section/technology', {
waitUntil: 'domcontentloaded',
timeout: 60000,
});
await new Promise((r) => setTimeout(r, 3500)); // deixe a lista de histórias hidratar
console.log(await page.title());
// 'Tecnologia - The New York Times'
A pausa para a confirmação dá tempo ao renderizador do lado do cliente para anexar a lista de histórias após a chegada do DOM analisado inicial.
Nota: nytimes.com limita agressivamente a taxa de acesso e rejeita tráfego automatizado com erros de acesso. Uma sessão de Navegador de Scraping ao vivo conectou-se e retornou o título da seção durante a autoria (
page.title()→ "Tecnologia - The New York Times"); no momento da re-verificação, o dispositivo automatizado expirou ao tentar acessar nytimes.com através do proxy, então os passos de aquisição do NYT são registrados como uma lacuna de pré-requisito bloqueada na rede. Execute os snippets com sua própria chave e saída residencial dos EUA para reproduzir a lista ao vivo.
Passo 2 — Descobrir artigos pelo padrão de URL
Ignore completamente as classes CSS hash. Todo link de artigo corresponde a um caminho datado terminando em .html, então filtre todos os ancoramentos nesse padrão, elimine duplicatas e pegue o título diretamente do texto do link:
javascript
const articles = await page.evaluate(() => {
const abs = (u) => { try { return new URL(u, location.href).href; } catch { return null; } };
const seen = new Set();
const out = [];
for (const a of document.querySelectorAll('a[href]')) {
const href = a.getAttribute('href');
if (!href || !/\/\d{4}\/\d{2}\/\d{2}\/.+\.html/.test(href)) continue;
const url = abs(href);
if (seen.has(url)) continue;
const headline = a.innerText.trim();
if (!headline) continue;
seen.add(url);
const wrap = a.closest('section, li, article');
const summary = wrap?.querySelector('p[class*="summary"]')?.innerText?.trim() || null;
out.push({ headline, url, summary });
}
return out;
});
console.log(articles.length, 'artigos');
console.log(articles[0]);
// 21 artigos
// {
// headline: 'Reino Unido Anuncia Proibição de Mídias Sociais para Crianças',
// url: 'https://www.nytimes.com/2026/06/15/world/europe/uk-social-media-children.html',
// summary: null
// }
O teste /\d{4}\/\d{2}\/\d{2}\/.+\.html/ é o que torna isso durável: navegação por seção, páginas de autores e módulos promocionais não têm um caminho datado, então eles são automaticamente excluídos. A desduplicação por URL lida com os casos em que a mesma história está vinculada duas vezes (link de imagem mais link de título).
Obtenha sua chave da API no plano gratuito: app.scrapeless.com
Passo 3 — Varredura de várias seções
Cada seção é uma página /section/<nome> com a mesma estrutura, então percorra aquelas que você se importa, reutilizando a sessão e marcando cada história com sua seção de origem:
javascript
const sections = ['tecnologia', 'negócios', 'mundo'];
const all = [];
for (const name of sections) {
await page.goto(`https://www.nytimes.com/section/${name}`, {
waitUntil: 'domcontentloaded',
timeout: 60000,
});
await new Promise((r) => setTimeout(r, 3500));
const batch = await page.evaluate(() => {
const abs = (u) => { try { return new URL(u, location.href).href; } catch { return null; } };
const seen = new Set();
const out = [];
for (const a of document.querySelectorAll('a[href]')) {
const href = a.getAttribute('href');
if (!href || !/\/\d{4}\/\d{2}\/\d{2}\/.+\.html/.test(href)) continue;
const url = abs(href);
if (seen.has(url) || !a.innerText.trim()) continue;
seen.add(url);
out.push({ headline: a.innerText.trim(), url });
}
return out;
});
all.push(...batch.map((a) => ({ ...a, section: name })));
console.log(`${name}: ${batch.length} artigos`);
}
Desduplicar all por URL no final — histórias às vezes aparecem sob mais de um departamento.
O que você recebe de volta
Cada artigo é um registro plano — título, link e (quando presente) um resumo:
json
[
{
"headline": "As Ações da SpaceX Disparam no Primeiro Dia Completo de Negociação",
"url": "https://www.nytimes.com/2026/06/15/business/spacex-stock.html",
"summary": null
}
]
// O esquema reflete exatamente o que a avaliação do Passo 2 emite. Os valores dos campos são amostras ilustrativas.
Algumas observações honestas:
- Resumos muitas vezes estão ausentes nas páginas de seção. Os links da visualização da lista mostram títulos sem um dek, então
summaryé frequentementenull; pegue o resumo da própria página do artigo, se precisar. - A mesma história pode linkar duas vezes. Ancoragens de imagem e título apontam para uma URL — desduplica por URL, como o código faz.
- O teste de caminho datado é o filtro de sustentação. Ele sobrevive à mudança de nomes de classes; se a extração algum dia retornar links de navegação, aperte a regex (exija um segmento de seção antes do slug).
- Os corpos dos artigos são comumente medidos. Títulos e links são públicos; o texto completo por trás deles pode exigir uma assinatura, que este fluxo de trabalho não toca.
Conclusão: um raspador de títulos durável do NYT
Um scraper confiável do New York Times é carregado com `domcontentloaded` → descobrir pelo padrão de URL `.html` datado → deduplicar. Combinar a forma da URL em vez de classes hash é o que mantém funcionando através de redesigns, e ler o título a partir do texto âncora significa que um seletor faz todo o trabalho. Rodar no Scrapeless Scraping Browser fornece a renderização Chromium e a saída residencial que fazem a lista de seções carregar em primeiro lugar. Para transformar os links coletados em dados de artigo estruturados, faça isso em conjunto com um [site scraper construído da mesma forma](https://www.scrapeless.com/pt/blog/etsy-scraper-browser); a [página do produto Scraping Browser](https://www.scrapeless.com/pt/product/scraping-browser?utm_source=website&utm_medium=blog&utm_campaign=scrapingbrowser&utm_term=scrape-new-york-times) e [documentos](https://docs.scrapeless.com) cobrem toda a superfície do SDK. Espere pelo DOM, combine o padrão de URL e deduplique.
---
## Pronto para Construir Seu Pipeline de Dados Potencializado por IA?
Junte-se à nossa comunidade para reivindicar um plano gratuito e conectar-se com desenvolvedores que estão construindo pipelines de notícias e mídia: [Discord](https://discord.gg/VU2vtbq7Q2) · [Telegram](https://t.me/scrapeless).
Inscreva-se em [app.scrapeless.com](https://app.scrapeless.com/passport/login/?utm_source=website&utm_medium=blog&utm_campaign=scrapingbrowser&utm_term=scrape-new-york-times) para acesso gratuito ao runtime do Scraping Browser e adapte os padrões acima às seções e tópicos que suas necessidades de monitoramento exigem. Veja [preços](https://www.scrapeless.com/pt/pricing?utm_source=website&utm_medium=blog&utm_campaign=scrapingbrowser&utm_term=scrape-new-york-times) para escalabilidade.
---
## FAQ
**Q: É legal fazer scraping do New York Times?**
Coletar títulos e URLs de artigos listados publicamente é geralmente permitido, mas os Termos de Serviço do NYT e a lei de direitos autorais governam como você armazena e reutiliza o conteúdo. Extraia apenas dados públicos, não contorne paywalls, respeite os ToS e consulte um advogado para seu caso de uso.
**Q: Eu preciso de um proxy?**
Sim — defina `proxyCountry: 'US'` (ou a edição alvo). O NYT localiza conteúdo e limita a taxa por IP, então uma saída residencial consistente mantém o conjunto de resultados estável.
**Q: Por que o `networkidle2` fica travado nesta página?**
Porque a página continua disparando solicitações em segundo plano (anúncios, análises, personalização), portanto, a rede nunca fica totalmente ociosa. Carregue com `domcontentloaded` e uma pausa curta de espera no lugar.
**Q: Meus seletores quebraram após um redesign. Como faço para tornar a extração durável?**
Combine o padrão de URL do artigo (`/YYYY/MM/DD/<path>.html`) em vez de classes CSS hash — a forma da URL é estável em redesigns, mesmo quando os nomes das classes mudam.
**Q: Posso obter o corpo completo do artigo?**
Este fluxo de trabalho coleta títulos e links públicos. Os corpos dos artigos geralmente são restritos atrás de uma assinatura; buscá-los é um passo separado, dependente de acesso e não algo a ser feito contornando o paywall.
**Q: Quantas seções posso varrer de uma só vez?**
Percorra seções dentro de uma sessão e mantenha a concorrência modesta — três sessões por host é um teto seguro para execuções paralelas.
**Q: Posso executar isso sem um agente de IA?**
Sim. É o Puppeteer simples 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.



