🎯 一款可定制、具备反检测功能的云浏览器,由自主研发的 Chromium驱动,专为网页爬虫AI 代理设计。👉立即试用
返回博客

如何抓取《纽约时报》

Isabella Garcia
Isabella Garcia

Web Data Collection Specialist

29-Jun-2026

TL;DR:

  • 通过URL形状发现文章,而不是脆弱的CSS类。 每个纽约时报的故事链接都遵循/YYYY/MM/DD/<section>/<slug>.html。在页面上匹配该模式,你可以收集真实的文章,同时跳过导航、促销和版面装饰。
  • 标题是锚点自己的文本。 在一个章节页面上,每个故事链接包装了它的标题,因此anchor.innerText提供了一个干净的标题,没有额外的选择器。
  • 等待DOM,而不是网络。 NYT页面保持后台请求运行,因此networkidle2可能会停滞;改用domcontentloaded和一个短暂的稳定暂停来加载,然后读取列表。
  • 章节页面是可靠的入口点。 /section/technology/section/business等呈现一致的当前故事列表—比繁忙的主页更好的种子。
  • 公开的标题和链接,而不是付费墙后的内容。 这将收集公开列出的标题和文章URL;完整的文章文本通常是计量的,绕过付费墙超出范围。
  • 免费开始。 新的Scrapeless账号包括免费的Scraping Browser运行时—请在app.scrapeless.com注册。

介绍:从繁忙页面获取干净的标题源

纽约时报的章节页面是一个实时编辑源—技术、商业、世界和每个其他部门的当前标题和文章链接。这使其成为媒体监测、趋势跟踪和向下游爬虫提供新故事链接的强大来源。获取干净的数据是困难的部分。

该页面是JavaScript渲染的,从未真正安静—广告、分析和个性化不断发送请求,因此一个等待网络闲置的抓取器可能会停滞。标记也是类散列的(css-1u3p7j1等),因此你今天固定的选择器在下次部署时会中断。保持稳定的是URL结构:每个文章位于以.html结尾的定日期路径上。

本指南在Scrapeless Scraping Browser上运行NYT章节抓取器—一个连接到Puppeteer的反检测云浏览器,并通过该耐用的URL模式而不是脆弱的类来发现文章。下面的每个片段都是针对实时章节页面运行的。仅公开标题和链接。


你可以用它做什么

  • 构建章节源—从技术或商业等部门收集每个当前的标题和文章URL。
  • 监控一个主题的覆盖率,通过定期重新运行同一章节并对比链接。
  • 为全文抓取器提供种子,使用干净、去重的文章URL。
  • 跟踪多个部门,遍历多个/section/<name>页面。
  • 向AI代理提供一个结构化的故事列表,而不是原始页面HTML。

为什么选择Scrapeless Scraping Browser

Scrapeless Scraping Browser是一个可定制的反检测云浏览器,专为网络爬虫和AI代理设计。特别是针对纽约时报,它提供:

  • 自开发的Chromium—渲染构建故事列表的JavaScript,因此链接存在于DOM中。
  • 反检测指纹识别—会话看起来像真实浏览器,因此可以规避自动流量防护,章节页面正常服务。
  • 在195多个国家的住宅代理—固定美国出口,因此页面返回标准美国版本。
  • 会话持久性—在多个章节中保持一个会话活跃。
  • 标准的Puppeteer连接Puppeteer.connect()返回一个正常的Browser;你的提取代码是普通的Puppeteer。

在免费计划上获取API密钥,访问app.scrapeless.com


先决条件

  • Node.js 18或更新版本
  • 一个Scrapeless账户和API密钥—请在app.scrapeless.com注册
  • 对Puppeteer有基本的了解

安装

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

第一步 — 连接并加载章节页面

连接到具有美国出口的云浏览器,然后打开一个章节。使用domcontentloaded和一个短暂的稳定暂停进行加载—页面会不断发送后台请求,因此等待完整的网络闲置可能会停滞:

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)); // 让故事列表获取数据

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

结算暂停给客户端渲染时间,以在初始的 解析的 DOM 到达后附加故事列表。

注意:nytimes.com 会积极限制速率并拒绝自动化流量,导致访问错误。在创作期间,实时抓取浏览器会话连接并返回了章节标题(page.title() → "Technology - The New York Times");在重新验证时,自动化工具通过代理访问 nytimes.com 超时,因此 NYT-fetch 步骤被记录为网络阻塞的前提条件缺口。使用你自己的密钥和美国住宅出口运行代码片段以重现实时列表。


步骤 2 — 按照 URL 模式发现文章

完全跳过哈希的 CSS 类。每个文章链接匹配以 .html 结尾的日期路径,因此在该模式上筛选所有锚点,去重,并直接从链接文本中获取标题:

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, 'articles');
console.log(articles[0]);
// 21 articles
// {
//   headline: '英国宣布禁止儿童使用社交媒体',
//   url: 'https://www.nytimes.com/2026/06/15/world/europe/uk-social-media-children.html',
//   summary: null
// }

/\d{4}\/\d{2}\/\d{2}\/.+\.html/ 测试使得这一点持久:章节导航、作者页面和促销模块不携带日期路径,因此它们会自动排除。通过 URL 去重处理相同故事被链接两次的情况(图片链接加上标题链接)。

在免费计划上获取您的 API 密钥:app.scrapeless.com


步骤 3 — 扫描多个章节

每个部门都是一个 /section/<name> 页面,具有相同的结构,因此循环遍历您关心的章节,重用会话并为每个故事标记其来源章节:

javascript Copy
const sections = ['technology', 'business', 'world'];
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} articles`);
}

最后通过 URL 去重 all — 有时故事在多个部门下出现。


您得到的回报

每篇文章都是一个扁平记录 — 标题、链接和(如有)摘要:

json Copy
[
  {
    "headline": "SpaceX 的股票在首次全部交易日暴涨",
    "url": "https://www.nytimes.com/2026/06/15/business/spacex-stock.html",
    "summary": null
  }
]
// 架构准确反映了步骤 2 评估的输出。字段值为示例。

一些诚实的观察:

  • 摘要通常在章节页面缺失。 列表视图链接没有内容的标题,因此 summary 经常为 null;如果需要,直接从文章页面提取摘要。
  • 相同故事可以被链接两次。 图像和标题锚点指向一个 URL — 按照代码中的方式通过 URL 去重。
  • 日期路径测试是负载支撑过滤器。 它能够抵御类名的变动;如果提取返回导航链接,请收紧正则表达式(在 slug 之前要求一个章节段)。
  • 文章内容通常是有尺寸限制的。 标题和链接是公开的;其背后的完整文本可能需要订阅,而此工作流程不涉及。

结论:一个持久的 NYT 标题抓取器

Copy
一个可靠的纽约时报抓取工具是以 `domcontentloaded` 加载的 → 通过带日期的 `.html` URL 模式发现 → 去重。匹配 URL 形状而不是哈希类是它在重新设计中保持工作的原因,而从锚文本读取标题意味着一个选择器可以完成整个工作。在 SCRAPELESS 抓取浏览器上运行提供了 Chromium 渲染和住宅出口,使得版块列表能够首次加载。将收集到的链接转化为结构化文章数据,可以将此与一个[以相同方式构建的网站抓取工具](https://www.scrapeless.com/zh/blog/etsy-scraper-browser)配对;[抓取浏览器产品页面](https://www.scrapeless.com/zh/product/scraping-browser?utm_source=website&utm_medium=blog&utm_campaign=scrapingbrowser&utm_term=scrape-new-york-times)和[文档](https://docs.scrapeless.com)涵盖了完整的 SDK 面。等待 DOM,匹配 URL 模式,并去重。

---

## 准备好构建您的 AI 驱动的数据管道了吗?

加入我们的社区,领取免费计划,并与构建新闻和媒体管道的开发者联系:[Discord](https://discord.gg/VU2vtbq7Q2) · [Telegram](https://t.me/scrapeless)。

在 [app.scrapeless.com](https://app.scrapeless.com/passport/login/?utm_source=website&utm_medium=blog&utm_campaign=scrapingbrowser&utm_term=scrape-new-york-times) 注册以获取免费的抓取浏览器运行时,并将上述模式适应于您需要监控的部分和主题。有关规模的详细信息,请参见[定价](https://www.scrapeless.com/zh/pricing?utm_source=website&utm_medium=blog&utm_campaign=scrapingbrowser&utm_term=scrape-new-york-times)。

---

## 常见问题解答

**问:抓取纽约时报是否合法?**
收集公开列出的标题和文章 URL 通常是允许的,但《纽约时报服务条款》和版权法管辖您如何存储和重用内容。仅抓取公开数据,别绕过付费墙,尊重服务条款,并咨询顾问以处理您的用例。

**问:我需要代理吗?**
是的 — 固定 `proxyCountry: 'US'`(或您的目标版本)。纽约时报根据 IP 本地化内容并限制访问速率,因此一致的住宅出口保持结果集的稳定。

**问:为什么 `networkidle2` 在这个页面上挂起?**
因为页面不断发出后台请求(广告、分析、个性化),所以网络从未完全空闲。请改为使用 `domcontentloaded` 和短暂的稳定暂停。

**问:我的选择器在重新设计后失效了。我该如何使提取耐用?**
匹配文章 URL 模式 (`/YYYY/MM/DD/<path>.html`),而不是哈希 CSS 类 — 即使类名发生变化,URL 形状在重新设计中也保持稳定。

**问:我可以获得完整的文章内容吗?**
此工作流程收集公开的标题和链接。文章正文通常在订阅后受到限制;获取它们是另一个依赖访问的步骤,而不是通过规避付费墙来处理的事。

**问:我一次可以处理多少个部分?**
在一个会话中循环处理部分,并保持并发适度 — 每个主机三个会话是并行运行的安全上限。

**问:我可以在没有 AI 代理的情况下运行吗?**
可以。这是 ScrapeLess 会话上的普通 Puppeteer — 不需要代理。

在Scrapeless,我们仅访问公开可用的数据,并严格遵循适用的法律、法规和网站隐私政策。本博客中的内容仅供演示之用,不涉及任何非法或侵权活动。我们对使用本博客或第三方链接中的信息不做任何保证,并免除所有责任。在进行任何抓取活动之前,请咨询您的法律顾问,并审查目标网站的服务条款或获取必要的许可。

最受欢迎的文章

目录