Volver al blog

Cómo extraer información del New York Times

Isabella Garcia
Isabella Garcia

Web Data Collection Specialist

29-Jun-2026

TL;DR:

  • Descubre artículos por su forma de URL, no por una clase CSS frágil. Cada enlace de historia del New York Times sigue el patrón /AAAA/MM/DD/<sección>/<slug>.html. Coincide con ese patrón en toda la página y recogerás los artículos reales mientras omites la navegación, promociones y los elementos de sección.
  • El titular es el propio texto del enlace. En una página de sección, cada enlace de historia envuelve su titular, por lo que anchor.innerText te da un título limpio sin un selector adicional.
  • Espera el DOM, no la red. La página de NYT sigue ejecutando solicitudes en segundo plano, por lo que networkidle2 puede quedarse atascado; carga con domcontentloaded y una breve pausa, y luego lee la lista.
  • Las páginas de sección son el punto de entrada confiable. /section/technology, /section/business, y el resto muestran una lista consistente de historias actuales — una mejor base que la bulliciosa página de inicio.
  • Titulares y enlaces públicos, no textos de pago. Esto recoge los titulares y URLs de artículos listados públicamente; el texto completo del artículo a menudo está controlado, y eludir un muro de pago está fuera del alcance.
  • Gratis para comenzar. Las nuevas cuentas de Scrapeless incluyen tiempo de ejecución gratuito para el Scraping Browser — regístrate en app.scrapeless.com.

Introducción: un feed de titulares limpio de una página ocupada

Una página de sección del New York Times es un feed editorial en vivo — titulares actuales y enlaces de artículos para tecnología, negocios, mundo y cada otro escritorio. Eso lo convierte en una fuente sólida para monitoreo de medios, seguimiento de tendencias y suministro de enlaces frescos de historias a un rastreador downstream. Obtenerlo de manera limpia es la parte difícil.

La página es renderizada por JavaScript y nunca se queda realmente quieta — anuncios, análisis y personalización siguen generando solicitudes, por lo que un scraper que espera a que la red esté inactiva puede quedar atascado. La marca también tiene hash de clase (css-1u3p7j1 y amigos), por lo que un selector que fijas hoy puede romperse en la siguiente implementación. Lo que se mantiene estable es la estructura de la URL: cada artículo vive en un camino datado que termina en .html.

Esta guía ejecuta un scraper de sección de NYT en Scrapeless Scraping Browser — un navegador en la nube anti-detección conectado a Puppeteer — y descubre artículos por ese patrón de URL durable en lugar de clases frágiles. Cada fragmento a continuación se ejecutó contra una página de sección en vivo. Solo titulares y enlaces públicos.


Lo Que Puedes Hacer Con Esto

  • Construir un feed de sección — recopila cada titular actual y URL de artículo de un escritorio como Tecnología o Negocios.
  • Monitorear la cobertura de un tema volviendo a ejecutar la misma sección en un horario y comparando los enlaces.
  • Sembrar un rastreador de texto completo con URLs de artículos limpias y sin duplicados.
  • Seguir múltiples escritorios recorriendo varias páginas /section/<nombre>.
  • Proporcionar a un agente de IA una lista estructurada de historias en lugar de HTML de página en bruto.

Por Qué Scrapeless Scraping Browser

Scrapeless Scraping Browser es un navegador en la nube personalizable y anti-detección diseñado para rastreadores web y agentes de IA. Para el New York Times, específicamente, ofrece:

  • Chromium auto-desarrollado — renderiza el JavaScript que construye la lista de historias, por lo que los enlaces existen en el DOM.
  • Impresion de huellas anti-detección — la sesión se lee como un navegador real, por lo que elude las defensas contra tráfico automatizado y la página de sección se sirve normalmente.
  • Proxies residenciales en más de 195 países — fija la salida en EE.UU. para que la página devuelva su edición estándar de EE.UU.
  • Persistencia de sesión — mantiene una sesión activa en varias secciones.
  • Una conexión estándar de PuppeteerPuppeteer.connect() devuelve un Browser normal; tu código de extracción es puro Puppeteer.

Obtén tu clave API en el plan gratuito en app.scrapeless.com.


Requisitos Previos

  • Node.js 18 o más nuevo
  • Una cuenta de Scrapeless y clave API — regístrate en app.scrapeless.com
  • Familiaridad básica con Puppeteer

Instalar

bash Copy
npm install @scrapeless-ai/sdk puppeteer-core
bash Copy
export SCRAPELESS_API_KEY="tu_token_api_aquí"

Paso 1 — Conectar y cargar una página de sección

Conéctate al navegador en la nube con salida en EE.UU., luego abre una sección. Carga con domcontentloaded y una breve pausa — la página sigue haciendo solicitudes en segundo plano, por lo que esperar a que toda la red esté inactiva puede quedar atascado:

javascript Copy
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)); // deja que la lista de historias se hidrate

console.log(await page.title());
// 'Tecnología - The New York Times'

La pausa de asentamiento le da al renderizado del lado del cliente tiempo para adjuntar la lista de historias después de que llega el DOM parseado inicial.

Nota: nytimes.com limita agresivamente la tasa de acceso y rechaza el tráfico automatizado con errores de acceso. Una sesión de navegador de Scraping en vivo se conectó y devolvió el título de la sección durante la redacción (page.title() → "Tecnología - The New York Times"); en el momento de la re-verificación, el arnés automatizado se agotó al intentar llegar a nytimes.com a través del proxy, por lo que los pasos de obtención de NYT se registran como una brecha de requisito bloqueado por red. Ejecuta los fragmentos con tu propia clave y salida residencial en EE. UU. para reproducir la lista en vivo.


Paso 2 — Descubrir artículos por su patrón de URL

Ignora por completo las clases CSS con hash. Cada enlace de artículo coincide con un camino fechado que termina en .html, así que filtra todos los enlaces en ese patrón, elimina duplicados y toma el titular directamente del texto del enlace:

javascript Copy
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, 'artículos');
console.log(articles[0]);
// 21 artículos
// {
//   headline: 'Gran Bretaña Anuncia Prohibición de Redes Sociales para Niños',
//   url: 'https://www.nytimes.com/2026/06/15/world/europe/uk-social-media-children.html',
//   summary: null
// }

La prueba /\d{4}\/\d{2}\/\d{2}\/.+\.html/ es lo que la hace duradera: la navegación por secciones, las páginas de autores, y los módulos promocionales no tienen un camino fechado, por lo que se eliminan automáticamente. Dedupe por URL maneja los casos donde la misma historia está vinculada dos veces (enlace de imagen más enlace de titular).

Obtén tu clave API en el plan gratuito: app.scrapeless.com


Paso 3 — Barrer múltiples secciones

Cada oficina es una página /section/<name> con la misma estructura, así que itera sobre las que te importan, reutilizando la sesión y etiquetando cada historia con su sección de origen:

javascript Copy
const sections = ['tecnología', 'negocios', '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} artículos`);
}

Dedupe all por URL al final: las historias a veces aparecen bajo más de una oficina.


Lo que obtienes de regreso

Cada artículo es un registro plano: titular, enlace y (cuando está presente) un resumen:

json Copy
[
  {
    "headline": "El Accionario de SpaceX Aumenta en su Primer Día Completo de Negociaciones",
    "url": "https://www.nytimes.com/2026/06/15/business/spacex-stock.html",
    "summary": null
  }
]
// El esquema refleja exactamente lo que la evaluación del Paso 2 emite. Los valores de los campos son muestras ilustrativas.

Algunas observaciones sinceras:

  • Los resúmenes a menudo están ausentes en las páginas de sección. Los enlaces de vista de lista vinculan titulares sin un dek, por lo que summary es frecuentemente null; extrae el resumen de la página del artículo mismo si lo necesitas.
  • La misma historia puede vincularse dos veces. Los anclajes de imagen y titular apuntan a una URL — deduplica por URL, como lo hace el código.
  • La prueba de camino fechado es el filtro de carga. Sobrevive a los cambios en los nombres de clase; si la extracción alguna vez devuelve enlaces de navegación, ajusta la expresión regular (requiere un segmento de sección antes del slug).
  • Los cuerpos de los artículos son comúnmente medidos. Los titulares y enlaces son públicos; el texto completo detrás de ellos puede requerir una suscripción, que este flujo de trabajo no toca.

Conclusión: un raspador de titulares durable de NYT

Copy
Un scraper confiable de New York Times se carga con `domcontentloaded` → se descubre a través del patrón de URL `.html` fechado → se dedupe. Coincidir con la forma de la URL en lugar de clases hash es lo que lo mantiene funcionando a través de rediseños, y leer el titular del texto del ancla significa que un selector realiza toda la tarea. Ejecutarse en Scrapeless Scraping Browser proporciona el renderizado de Chromium y el egreso residencial que hace que la lista de secciones se cargue en primer lugar. Para convertir los enlaces recopilados en datos estructurados de artículos, asocia esto con un [scraper de sitio construido de la misma manera](https://www.scrapeless.com/es/blog/etsy-scraper-browser); la [página del producto Scraping Browser](https://www.scrapeless.com/es/product/scraping-browser?utm_source=website&utm_medium=blog&utm_campaign=scrapingbrowser&utm_term=scrape-new-york-times) y [documentación](https://docs.scrapeless.com) cubren toda la superficie del SDK. Espera el DOM, coincide con el patrón de URL y dedupe.

---

## ¿Listo para construir tu pipeline de datos potenciado por IA?

Únete a nuestra comunidad para reclamar un plan gratuito y conectarte con desarrolladores que construyen pipelines de noticias y medios: [Discord](https://discord.gg/VU2vtbq7Q2) · [Telegram](https://t.me/scrapeless).

Regístrate en [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 obtener tiempo de ejecución gratuito de Scraping Browser y adapta los patrones anteriores a las secciones y temas que tus necesidades de monitoreo requieren. Consulta [precios](https://www.scrapeless.com/es/pricing?utm_source=website&utm_medium=blog&utm_campaign=scrapingbrowser&utm_term=scrape-new-york-times) para escalar.

---

## FAQ

**P: ¿Es legal raspar el New York Times?**  
Recopilar titulares y URLs de artículos públicamente listados es generalmente permisible, pero los Términos de Servicio de NYT y la ley de derechos de autor regulan cómo almacenan y reutilizan el contenido. Raspas solo datos públicos, no eludas muros de pago, respeta los Términos de Servicio y consulta a un abogado para tu caso de uso.

**P: ¿Necesito un proxy?**  
Sí: fija `proxyCountry: 'US'` (o tu edición objetivo). El NYT localiza el contenido y limita la tasa por IP, por lo que un egreso residencial constante mantiene estable el conjunto de resultados.

**P: ¿Por qué `networkidle2` se queda colgado en esta página?**  
Porque la página sigue enviando solicitudes en segundo plano (anuncios, análisis, personalización), por lo que la red nunca se inactiva completamente. Cárgalo con `domcontentloaded` y una breve pausa de asentamiento en su lugar.

**P: Mis selectores se rompieron después de un rediseño. ¿Cómo hago que la extracción sea duradera?**  
Coincide con el patrón de URL del artículo (`/AAAA/MM/DD/<ruta>.html`) en lugar de clases CSS hasheadas: la forma de URL es estable a través de rediseños incluso cuando cambian los nombres de clase.

**P: ¿Puedo obtener el cuerpo completo del artículo?**  
Este flujo de trabajo recopila titulares y enlaces públicos. Los cuerpos de los artículos a menudo están limitados detrás de una suscripción; obtenerlos es un paso separado, dependiente de acceso y no debe hacerse eludiendo el muro de pago.

**P: ¿Cuántas secciones puedo barrer a la vez?**  
Recorrer secciones dentro de una sesión y mantener la concurrencia modesta: tres sesiones por host es un límite seguro para las ejecuciones paralelas.

**P: ¿Puedo ejecutar esto sin un agente de IA?**  
Sí. Es solo Puppeteer sobre la sesión de Scrapeless: no se requiere agente.

En Scrapeless, solo accedemos a datos disponibles públicamente y cumplimos estrictamente con las leyes, regulaciones y políticas de privacidad del sitio web aplicables. El contenido de este blog es sólo para fines de demostración y no implica ninguna actividad ilegal o infractora. No ofrecemos garantías y renunciamos a toda responsabilidad por el uso de la información de este blog o enlaces de terceros. Antes de realizar cualquier actividad de scraping, consulte a su asesor legal y revise los términos de servicio del sitio web de destino u obtenga los permisos necesarios.

Artículos más populares

Catalogar