🎯 Trình duyệt đám mây tùy chỉnh, chống phát hiện được hỗ trợ bởi Chromium tự phát triển, thiết kế dành cho trình thu thập dữ liệu webtác nhân AI. 👉Dùng thử ngay
Quay lại blog

Cách lấy dữ liệu từ New York Times

Isabella Garcia
Isabella Garcia

Web Data Collection Specialist

29-Jun-2026

Tóm tắt ngắn:

  • Khám phá các bài viết qua hình thái URL, không phải qua class CSS yếu. Mỗi liên kết câu chuyện của New York Times tuân theo định dạng /YYYY/MM/DD/<section>/<slug>.html. Khớp với mẫu đó trên toàn trang và bạn sẽ thu thập được các bài viết thực sự trong khi bỏ qua các mục điều hướng, quảng cáo và giao diện phần.
  • Tiêu đề là văn bản của liên kết. Trên một trang phần, mỗi liên kết câu chuyện bao quanh tiêu đề của nó, vì vậy anchor.innerText cho bạn một tiêu đề sạch với không có bộ chọn bổ sung.
  • Chờ DOM, không phải mạng. Trang NYT giữ cho các yêu cầu nền tiếp tục chạy, vì vậy networkidle2 có thể bị treo; tải bằng domcontentloaded và một khoảng dừng ngắn thay thế, sau đó đọc danh sách.
  • Các trang phần là điểm truy cập đáng tin cậy. /section/technology, /section/business, và những trang còn lại hiển thị danh sách nhất quán các câu chuyện hiện tại — một mảnh đất tốt hơn so với trang chính bận rộn.
  • Tiêu đề và liên kết công khai, không phải nội dung bị phí. Điều này thu thập các tiêu đề và URL bài viết được liệt kê công khai; văn bản bài viết đầy đủ thường được giám sát, và việc vượt qua tường phí là ngoài phạm vi.
  • Miễn phí để bắt đầu. Tài khoản Scrapeless mới bao gồm thời gian chạy Scraping Browser miễn phí — đăng ký tại app.scrapeless.com.

Giới thiệu: một nguồn cấp tiêu đề sạch từ một trang bận rộn

Một trang phần của New York Times là một luồng biên tập trực tiếp — các tiêu đề hiện tại và liên kết bài viết cho công nghệ, kinh doanh, thế giới, và các bàn khác. Điều đó khiến nó trở thành một nguồn mạnh mẽ cho việc giám sát truyền thông, theo dõi xu hướng, và cung cấp liên kết câu chuyện mới cho một trình thu thập phía dưới. Lấy nó một cách sạch sẽ là phần khó khăn.

Trang này được rendered JavaScript và không bao giờ thực sự im lặng — quảng cáo, phân tích và cá nhân hóa liên tục gửi yêu cầu, vì vậy một trình thu thập chờ mạng nhàn rỗi có thể bị treo. Đánh dấu cũng được gán class (css-1u3p7j1 và các bạn khác), vì vậy một bộ chọn bạn gán ngày hôm nay có thể bị hỏng trong lần triển khai tiếp theo. Điểm ổn định là cấu trúc URL: mỗi bài viết sống ở một đường dẫn có ngày kết thúc bằng .html.

Hướng dẫn này chạy một trình thu thập phần NYT trên Scrapeless Scraping Browser — một trình duyệt đám mây chống phát hiện được kết nối với Puppeteer — và khám phá các bài viết theo mẫu URL bền vững đó thay vì các class yếu. Mỗi đoạn bên dưới được thực hiện chống lại một trang phần trực tiếp. Chỉ có tiêu đề và liên kết công khai.


Những gì bạn có thể làm với nó

  • Xây dựng một nguồn cấp phần — thu thập mọi tiêu đề hiện tại và URL bài viết từ một bàn như Công nghệ hoặc Kinh doanh.
  • Theo dõi phạm vi của một chủ đề bằng cách chạy lại cùng một phần theo lịch và so sánh các liên kết.
  • Cung cấp cho một trình thu thập văn bản đầy đủ với các URL bài viết sạch sẽ, đã loại bỏ trùng lặp.
  • Theo dõi nhiều bàn bằng cách lặp qua một số trang /section/<name>.
  • Cung cấp cho một agent AI một danh sách câu chuyện có cấu trúc thay vì mã HTML trang thô.

Tại sao chọn Scrapeless Scraping Browser

Scrapeless Scraping Browser là một trình duyệt đám mây tùy chỉnh, chống phát hiện, được thiết kế cho các trình thu thập web và agent AI. Đặc biệt cho New York Times, nó mang lại:

  • Chromium tự phát triển — dựng trang JavaScript xây dựng danh sách câu chuyện, vì vậy các liên kết tồn tại trong DOM.
  • Chống phát hiện dấu vân tay — phiên làm việc trông giống như một trình duyệt thực, vì vậy nó tránh được các hệ thống phòng thủ chống lưu lượng tự động và trang phần hoạt động bình thường.
  • Proxy dân cư tại hơn 195 quốc gia — gán truy cập xuất tại Mỹ để trang trả về phiên bản tiêu chuẩn của Mỹ.
  • Duy trì phiên làm việc — giữ một phiên nóng giữa nhiều phần.
  • Kết nối Puppeteer tiêu chuẩnPuppeteer.connect() trả về một Browser thông thường; mã trích xuất của bạn là Puppeteer đơn giản.

Nhận khóa API của bạn bằng kế hoạch miễn phí tại app.scrapeless.com.


Các yêu cầu cần có

  • Node.js 18 hoặc mới hơn
  • Tài khoản Scrapeless và khóa API — đăng ký tại app.scrapeless.com
  • Kiến thức cơ bản về Puppeteer

Cài đặt

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

Bước 1 — Kết nối và tải một trang phần

Kết nối với trình duyệt đám mây với truy cập xuất tại Mỹ, sau đó mở một phần. Tải bằng domcontentloaded và một khoảng dừng ngắn — trang giữ cho các yêu cầu nền tiếp tục gửi, vì vậy chờ đợi mạng hoàn toàn nhàn rỗi có thể treo:

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)); // cho danh sách câu chuyện được làm mới

console.log(await page.title());
// 'Công nghệ - The New York Times'

Sự tạm dừng trong việc thiết lập cho phép render phía client có thời gian để gắn danh sách câu chuyện sau khi DOM được phân tích ban đầu được tải.

Lưu ý: nytimes.com tích cực giới hạn tốc độ và từ chối lưu lượng truy cập tự động bằng lỗi truy cập. Một phiên duyệt web tự động đã kết nối và trả về tiêu đề phần trong quá trình soạn thảo (page.title() → "Công nghệ - The New York Times"); tại thời điểm tái xác minh, bộ khung tự động đã hết thời gian khi cố gắng truy cập nytimes.com qua proxy, vì vậy các bước lấy NYT được ghi nhận như là một khoảng trống yêu cầu bị chặn mạng. Chạy các đoạn mã với khóa của riêng bạn và đường dẫn rời khỏi Mỹ để tái tạo danh sách trực tiếp.


Bước 2 — Khám phá các bài viết theo mẫu URL của chúng

Bỏ qua hoàn toàn các lớp CSS có băm. Mỗi liên kết bài viết khớp với một đường dẫn có ngày tháng kết thúc bằng .html, vì vậy lọc tất cả các liên kết trên mẫu đó, loại bỏ trùng lặp, và lấy tiêu đề trực tiếp từ văn bản liên kết:

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, 'bài viết');
console.log(articles[0]);
// 21 bài viết
// {
//   headline: 'Britain Announces Social Media Ban for Children',
//   url: 'https://www.nytimes.com/2026/06/15/world/europe/uk-social-media-children.html',
//   summary: null
// }

Kiểm tra /\d{4}\/\d{2}\/\d{2}\/.+\.html/ là điều làm cho điều này bền vững: điều hướng phần, trang tác giả và các mô-đun quảng cáo không mang đường dẫn có ngày tháng, vì vậy chúng tự động bị loại. Việc loại bỏ trùng lặp bằng URL xử lý các trường hợp mà cùng một câu chuyện được liên kết hai lần (liên kết hình ảnh cộng với liên kết tiêu đề).

Nhận khóa API của bạn trên gói miễn phí: app.scrapeless.com


Bước 3 — Quét nhiều phần nội dung

Mỗi bàn làm việc là một trang /section/<name> với cùng một cấu trúc, vì vậy hãy lặp qua những cái mà bạn quan tâm, tái sử dụng phiên làm việc và gán mỗi câu chuyện với phần nguồn của nó:

javascript Copy
const sections = ['công nghệ', 'kinh doanh', 'thế giới'];
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} bài viết`);
}

Loại bỏ trùng lặp all theo URL ở cuối — các câu chuyện đôi khi xuất hiện dưới nhiều bàn làm việc hơn một.


Những gì bạn nhận được

Mỗi bài viết là một bản ghi phẳng — tiêu đề, liên kết và (khi có) một tóm tắt:

json Copy
[
  {
    "headline": "Cổ phiếu của SpaceX tăng mạnh trong ngày giao dịch đầu tiên",
    "url": "https://www.nytimes.com/2026/06/15/business/spacex-stock.html",
    "summary": null
  }
]
// Lược đồ phản ánh chính xác những gì bước 2 đánh giá phát ra. Giá trị trường là các mẫu minh họa.

Một vài quan sát chân thành:

  • Tóm tắt thường không có trên các trang phần. Các liên kết trong chế độ xem danh sách chỉ cho tiêu đề mà không có dek, vì vậy summary thường là null; hãy lấy trích dẫn từ trang bài viết nếu bạn cần.
  • Cùng một câu chuyện có thể bị liên kết hai lần. Các liên kết hình ảnh và tiêu đề đều trỏ đến một URL — loại bỏ trùng lặp theo URL, như mã làm.
  • Kiểm tra đường dẫn có ngày tháng là bộ lọc chắc chắn. Nó tồn tại qua sự biến đổi tên lớp; nếu việc trích xuất ever trả về liên kết điều hướng, hãy siết chặt regex (yêu cầu một phân đoạn phần trước khi slug).
  • Nội dung bài viết thường được tính toán. Tiêu đề và liên kết là công khai; toàn bộ văn bản phía sau chúng có thể yêu cầu một đăng ký, mà quy trình này không chạm tới.

Kết luận: một trình scraper tiêu đề NYT bền vững

Copy
Một trình thu thập thông tin New York Times đáng tin cậy được tải bằng `domcontentloaded` → phát hiện qua mẫu URL `.html` theo ngày → loại bỏ trùng lặp. Việc khớp hình dáng URL thay vì các lớp băm giúp nó vẫn hoạt động qua các thiết kế lại, và việc đọc tiêu đề từ văn bản liên kết nghĩa là một bộ chọn thực hiện toàn bộ công việc. Chạy trên Scrapeless Scraping Browser cung cấp việc kết xuất Chromium và lối ra dân cư giúp danh sách mục tải ngay từ đầu. Để biến các liên kết đã thu thập thành dữ liệu bài viết có cấu trúc, kết hợp điều này với một [trình thu thập thông tin trang web được xây dựng tương tự](https://www.scrapeless.com/vi/blog/etsy-scraper-browser); trang sản phẩm [Scraping Browser](https://www.scrapeless.com/vi/product/scraping-browser?utm_source=website&utm_medium=blog&utm_campaign=scrapingbrowser&utm_term=scrape-new-york-times) và [tài liệu](https://docs.scrapeless.com) đề cập đến toàn bộ diện tích SDK. Chờ DOM, khớp mẫu URL và loại bỏ trùng lặp.

---

## Sẵn sàng xây dựng quy trình dữ liệu AI của bạn?

Tham gia cộng đồng của chúng tôi để nhận kế hoạch miễn phí và kết nối với các nhà phát triển xây dựng quy trình tin tức và truyền thông: [Discord](https://discord.gg/VU2vtbq7Q2) · [Telegram](https://t.me/scrapeless).

Đăng ký tại [app.scrapeless.com](https://app.scrapeless.com/passport/login/?utm_source=website&utm_medium=blog&utm_campaign=scrapingbrowser&utm_term=scrape-new-york-times) để có runtime Scraping Browser miễn phí và điều chỉnh các mẫu trên cho các mục và chủ đề mà bạn cần theo dõi. Xem [giá cả](https://www.scrapeless.com/vi/pricing?utm_source=website&utm_medium=blog&utm_campaign=scrapingbrowser&utm_term=scrape-new-york-times) để biết quy mô.

---

## Câu hỏi thường gặp

**H: Việc thu thập thông tin từ New York Times có hợp pháp không?**
Việc thu thập tiêu đề và URL bài viết công khai thường được phép, nhưng Điều khoản Dịch vụ của NYT và luật bản quyền quy định cách bạn lưu trữ và tái sử dụng nội dung. Chỉ thu thập dữ liệu công khai, không vượt qua tường phí, tôn trọng Điều khoản Dịch vụ, và tham khảo ý kiến pháp lý cho trường hợp sử dụng của bạn.

**H: Tôi có cần một proxy không?**
Có — gán `proxyCountry: 'US'` (hoặc phiên bản mục tiêu của bạn). NYT cục bộ hóa nội dung và giới hạn tỷ lệ theo IP, vì vậy một lối ra dân cư ổn định giúp giữ cho bộ kết quả ổn định.

**H: Tại sao `networkidle2` treo trên trang này?**
Bởi vì trang này liên tục gửi yêu cầu nền (quảng cáo, phân tích, cá nhân hóa), vì vậy mạng không bao giờ thực sự nhàn rỗi. Tải với `domcontentloaded` và một khoảng dừng ngắn thay vào đó.

**H: Các bộ chọn của tôi bị hỏng sau khi thiết kế lại. Làm thế nào để tôi làm cho việc trích xuất trở nên bền vững?**
Khớp mẫu URL bài viết (`/YYYY/MM/DD/<path>.html`) thay vì các lớp CSS băm — hình dáng URL ổn định qua các thiết kế lại ngay cả khi tên lớp thay đổi.

**H: Tôi có thể lấy toàn bộ nội dung bài viết không?**
Quy trình làm việc này thu thập tiêu đề và liên kết công khai. Nội dung bài viết thường bị giới hạn sau một đăng ký; việc lấy chúng là một bước riêng, phụ thuộc vào quyền truy cập và không phải là điều cần làm bằng cách vượt qua tường phí.

**H: Tôi có thể quét bao nhiêu mục một lần?**
Lặp lại các mục trong một phiên và giữ độ đồng thời ở mức vừa phải — ba phiên mỗi máy chủ là một giới hạn an toàn cho các lần chạy song song.

**H: Tôi có thể chạy điều này mà không cần một tác nhân AI không?**
Có. Đây là Puppeteer đơn giản trên phiên Scrapeless — không cần tác nhân.

Tại Scrapless, chúng tôi chỉ truy cập dữ liệu có sẵn công khai trong khi tuân thủ nghiêm ngặt các luật, quy định và chính sách bảo mật trang web hiện hành. Nội dung trong blog này chỉ nhằm mục đích trình diễn và không liên quan đến bất kỳ hoạt động bất hợp pháp hoặc vi phạm nào. Chúng tôi không đảm bảo và từ chối mọi trách nhiệm đối với việc sử dụng thông tin từ blog này hoặc các liên kết của bên thứ ba. Trước khi tham gia vào bất kỳ hoạt động cạo nào, hãy tham khảo ý kiến ​​cố vấn pháp lý của bạn và xem xét các điều khoản dịch vụ của trang web mục tiêu hoặc có được các quyền cần thiết.

Bài viết phổ biến nhất

Danh mục