Cách Tự Động Crawl Dữ Liệu Web Với Node.js và Cheerio

17/03/2026 P T P Chung 6 phút đọc 0 bình luận
Tự động crawl dữ liệu web với Node.js và Cheerio

Giới thiệu

Trong thời đại dữ liệu mở và sự bùng nổ của thông tin trên internet, việc thu thập dữ liệu từ các trang web đã trở thành một nhu cầu tất yếu cho nhiều dự án công nghệ. Từ phân tích thị trường, theo dõi giá cả, thu thập tin tức đến xây dựng cơ sở dữ liệu lớn, khả năng tự động hóa quá trình này sẽ giúp tiết kiệm rất nhiều thời gian và công sức. Với Node.js và thư viện Cheerio, bạn hoàn toàn có thể xây dựng một công cụ crawl đơn giản nhưng mạnh mẽ để trích xuất thông tin từ các trang web một cách nhanh chóng.

Cheerio là gì và tại sao nên dùng?

Cheerio là một thư viện dành cho Node.js, được xây dựng dựa trên jQuery core, cho phép bạn thao tác với DOM (Document Object Model) của trang HTML một cách dễ dàng. Khác với các công cụ browser automation như Puppeteer hay Selenium, Cheerio hoạt động trên server-side và không cần render trang web, do đó tốc độ và hiệu năng được cải thiện đáng kể. Cheerio phù hợp nhất cho các trang web tĩnh hoặc khi bạn chỉ cần trích xuất dữ liệu từ HTML source code.

Chuẩn bị môi trường và cài đặt

Để bắt đầu, bạn cần cài đặt Node.js trên máy. Sau đó, tạo một project mới và cài đặt Cheerio cùng các thư viện hỗ trợ khác:

npm init -y
npm install cheerio axios

Trong đó: - cheerio: thư viện chính để parse HTML. - axios: thư viện hỗ trợ request HTTP, giúp fetch nội dung trang web.

Các bước cơ bản để crawl dữ liệu

1. Fetch nội dung trang web

Sử dụng axios để gửi request và nhận về HTML source:

const axios = require('axios');
const cheerio = require('cheerio');

async function fetchHTML(url) { try { const response = await axios.get(url); return response.data; } catch (error) { console.error('Error fetching data:', error); return null; } }

2. Parse HTML với Cheerio

Sau khi có HTML, bạn dùng Cheerio để load và query DOM:

async function scrapeData(url) {
  const html = await fetchHTML(url);
  if (!html) return;

const $ = cheerio.load(html);

// Ví dụ: lấy tiêu đề trang const title = $('title').text(); console.log('Title:', title);

Quảng cáo

300x250 In-Content Advertisement

// Ví dụ: lấy danh sách các link $('a').each((index, element) => { const link = $(element).attr('href'); console.log(Link ${index + 1}:, link); }); }

3. Xử lý dữ liệu và lưu trữ

Tùy theo mục đích, bạn có thể lưu dữ liệu vào file JSON, CSV hoặc database. Cheerio cho phép bạn lấy text, attribute, hoặc thậm chí nội dung HTML của element:

const results = [];

$('div.article').each((i, el) => { const title = $(el).find('h2').text().trim(); const excerpt = $(el).find('p.excerpt').text().trim(); const url = $(el).find('a').attr('href');

results.push({ title, excerpt, url }); });

// Lưu vào file JSON const fs = require('fs'); fs.writeFileSync('data.json', JSON.stringify(results, null, 2));

Một số lưu ý khi crawl dữ liệu

- Tôn trọng robots.txt: Kiểm tra file robots.txt của trang web để biết được quy định crawl. - Rate limiting: Không gửi quá nhiều request trong thời gian ngắn để tránh bị block. - Xử lý lỗi: Luôn bắt lỗi và có cơ chế retry khi request thất bại. - Phân tích DOM: Trước khi viết code, hãy inspect HTML để xác định đúng selector.

Kết luận

Với Cheerio và Node.js, việc tự động hóa thu thập dữ liệu từ web trở nên đơn giản và hiệu quả hơn bao giờ hết. Cheerio đặc biệt mạnh mẽ khi xử lý các trang web tĩnh và khi bạn cần trích xuất thông tin một cách nhanh gọn. Tuy nhiên, hãy luôn tuân thủ các quy tắc đạo đức và pháp lý khi crawl dữ liệu. Hy vọng qua bài viết này, bạn đã có cái nhìn tổng quan và tự tin để bắt tay vào xây dựng công cụ crawl của riêng mình.

Quảng cáo

728x90 Bottom Advertisement

Thay thế bằng mã Google AdSense

Chia sẻ bài viết

Facebook Twitter

Bình luận

Chia sẻ ý kiến của bạn về bài viết này

Viết bình luận

Bình luận của bạn sẽ được kiểm duyệt trước khi hiển thị

Chưa có bình luận nào

Hãy là người đầu tiên bình luận về bài viết này!