CAPSOLVER
Blog
Quét dữ liệu web với Cheerio và Node.js 2026

Gian hàng web với Cheerio và Node.js 2026

Logo of CapSolver

Anh Tuan

Data Science Expert

20-Nov-2025

Scraping web là một kỹ thuật mạnh mẽ để trích xuất dữ liệu từ các trang web, được sử dụng rộng rãi trong phân tích dữ liệu, nghiên cứu thị trường và tổng hợp nội dung. Đến năm 2026, việc sử dụng Cheerio và Node.js cho scraping web vẫn tiếp tục là một phương pháp phổ biến và hiệu quả. Bài viết này sẽ đi sâu vào quy trình sử dụng Cheerio và Node.js cho scraping web, cung cấp hướng dẫn toàn diện và một ví dụ thực tế.

Mục lục

  • Cheerio là gì?
  • Yêu cầu tiên quyết
  • Thiết lập dự án
  • API chọn phần tử của Cheerio
  • Viết script scraping
  • Chạy script
  • Thách thức trong scraping web với Cheerio
  • Xử lý CAPTCHA trong scraping web
  • Xử lý trang động
  • Kết luận

Cheerio là gì?

Cheerio là một triển khai nhanh, linh hoạt và nhẹ của jQuery, được thiết kế đặc biệt cho các ứng dụng phía máy chủ. Nó cho phép các nhà phát triển phân tích và thao tác các tài liệu HTML bằng cách sử dụng cú pháp giống jQuery quen thuộc trong môi trường Node.js. Khác với các công cụ dựa trên trình duyệt, Cheerio không thực hiện việc hiển thị web thực tế mà thao tác trực tiếp trên chuỗi HTML, giúp nó trở nên hiệu quả đặc biệt cho nhiều nhiệm vụ scraping. Bên cạnh đó Puppeteer là một lựa chọn thay thế tuyệt vời cho scraping với Cheerio.

Yêu cầu tiên quyết

Trước khi bắt đầu với mã, hãy đảm bảo rằng bạn đã cài đặt Node.js và npm (Node Package Manager) trên hệ thống của mình. Nếu chưa cài đặt, bạn có thể tải và cài đặt chúng từ trang web chính thức của Node.js.

Thiết lập dự án

Bước 1: Tạo một thư mục dự án mới

Trước tiên, tạo một thư mục mới cho dự án của bạn và khởi tạo nó thành một dự án Node.js:

bash Copy
mkdir web-scraping
cd web-scraping
npm init -y

Cờ -y tự động trả lời "có" cho tất cả các lời nhắc, tạo ra một tệp package.json mặc định.

Bước 2: Cài đặt các phụ thuộc

Tiếp theo, cài đặt các phụ thuộc cần thiết, bao gồm axios để thực hiện các yêu cầu HTTP và cheerio để phân tích HTML:

bash Copy
npm install axios cheerio

Vướng mắc với việc thất bại lặp đi lặp lại trong việc giải CAPTCHA khó chịu?

Khám phá công nghệ giải CAPTCHA tự động liền mạch với Capsolver công nghệ Auto Web Unblock được hỗ trợ bởi AI!

Yêu cầu mã thưởng của bạn Mã thưởng để có được giải pháp CAPTCHA hàng đầu; CapSolver. |: WEBS. Sau khi sử dụng, bạn sẽ nhận thêm 5% thưởng sau mỗi lần nạp tiền, Không giới hạn

API chọn phần tử của Cheerio

Cheerio là một triển khai nhanh, linh hoạt và nhẹ của jQuery cốt lõi, được thiết kế đặc biệt cho phía máy chủ. Nó cho phép bạn sử dụng cú pháp giống jQuery để thao tác các tài liệu HTML trong môi trường Node.js.

Dưới đây là giải thích chi tiết về API chọn phần tử của Cheerio với các ví dụ mã:

  1. Tải tài liệu HTML:

    javascript Copy
    const cheerio = require('cheerio');
    const html = `
      <html>
        <head>
          <title>Ví dụ</title>
        </head>
        <body>
          <h1 class="title">Xin chào, thế giới!</h1>
          <div id="content">
            <p>Đây là một đoạn văn.</p>
            <a href="https://example.com">Liên kết</a>
          </div>
        </body>
      </html>
    `;
    const $ = cheerio.load(html);
  2. Chọn phần tử:

    • Chọn phần tử:

      javascript Copy
      const h1 = $('h1'); // Chọn tất cả các phần tử <h1>
      console.log(h1.text()); // Đầu ra: Xin chào, thế giới!
    • Chọn lớp:

      javascript Copy
      const title = $('.title'); // Chọn các phần tử có lớp "title"
      console.log(title.text()); // Đầu ra: Xin chào, thế giới!
    • Chọn ID:

      javascript Copy
      const content = $('#content'); // Chọn phần tử có id="content"
      console.log(content.html()); // Đầu ra: <p>Đây là một đoạn văn.</p><a href="https://example.com">Liên kết</a>
    • Chọn thuộc tính:

      javascript Copy
      const link = $('a[href="https://example.com"]'); // Chọn phần tử <a> với thuộc tính href cụ thể
      console.log(link.text()); // Đầu ra: Liên kết
  3. Duyệt và thao tác phần tử:

    • Duyệt phần tử:

      javascript Copy
      $('p').each((index, element) => {
        console.log($(element).text()); // Đầu ra nội dung văn bản của mỗi phần tử <p>
      });
    • Thay đổi nội dung phần tử:

      javascript Copy
      $('h1.title').text('Tiêu đề mới'); // Thay đổi nội dung văn bản của phần tử <h1>
      console.log($('h1.title').text()); // Đầu ra: Tiêu đề mới
    • Thêm và xóa phần tử:

      javascript Copy
      $('#content').append('<p>Một đoạn văn khác.</p>'); // Thêm một phần tử <p> mới bên trong #content
      console.log($('#content').html()); // Đầu ra: <p>Đây là một đoạn văn.</p><a href="https://example.com">Liên kết</a><p>Một đoạn văn khác.</p>
      
      $('a').remove(); // Xóa tất cả các phần tử <a>
      console.log($('#content').html()); // Đầu ra: <p>Đây là một đoạn văn.</p><p>Một đoạn văn khác.</p>

Những ví dụ này minh họa cách bạn có thể sử dụng API chọn phần tử của Cheerio để chọn, duyệt và thao tác các phần tử HTML theo cách tương tự như jQuery, nhưng trong môi trường Node.js.

Viết script scraping

Tạo một tệp có tên scraper.js trong thư mục dự án của bạn. Tệp này sẽ chứa script để trích xuất dữ liệu từ trang web đích. Thêm đoạn mã sau vào scraper.js:

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

// URL đích
const url = 'https://example.com';

async function fetchData() {
  try {
    // Gửi yêu cầu HTTP để lấy nội dung HTML
    const { data } = await axios.get(url);
    // Tải tài liệu HTML vào Cheerio
    const $ = cheerio.load(data);

    // Trích xuất dữ liệu từ HTML
    const title = $('title').text();
    const headings = [];
    $('h1, h2, h3').each((index, element) => {
      headings.push($(element).text());
    });

    // Hiển thị dữ liệu trích xuất
    console.log('Tiêu đề:', title);
    console.log('Tiêu đề:', headings);
  } catch (error) {
    console.error('Lỗi trích xuất dữ liệu:', error);
  }
}

fetchData();

Giải thích mã

  1. Nhập module: Script bắt đầu bằng cách nhập các module axioscheerio.
  2. Định nghĩa URL đích: URL của trang web cần scraping được định nghĩa.
  3. Trích xuất dữ liệu: Hàm fetchData gửi yêu cầu HTTP GET đến URL đích bằng axios. Dữ liệu phản hồi (nội dung HTML) sau đó được tải vào Cheerio.
  4. Phân tích HTML: Sử dụng cú pháp giống jQuery của Cheerio, script trích xuất nội dung của thẻ <title> và tất cả các thẻ <h1>, <h2>, <h3>.
  5. Hiển thị kết quả: Dữ liệu trích xuất được ghi vào console.

Chạy script

Để chạy script scraping, thực hiện lệnh sau trong terminal của bạn:

bash Copy
node scraper.js

Nếu mọi thứ được thiết lập đúng, bạn nên thấy tiêu đề trang web được trích xuất và nội dung của tất cả các thẻ tiêu đề được in ra console.

Thách thức trong scraping web với Cheerio

Mặc dù Cheerio mang lại nhiều lợi ích cho scraping web, nó cũng có những thách thức riêng mà các nhà phát triển có thể gặp phải:

  1. Trang web động và JavaScript: Một trong những thách thức chính với Cheerio là xử lý các trang web động dựa trên JavaScript. Các trang web hiện đại thường sử dụng JavaScript để tải nội dung động sau lần tải trang ban đầu. Vì Cheerio phân tích HTML tĩnh, nó có thể không bắt được nội dung được tạo động, điều này có thể làm giảm hiệu quả của việc scraping.

  2. Các biện pháp chống scraping: Các trang web triển khai nhiều biện pháp chống scraping để ngăn chặn việc trích xuất dữ liệu tự động:

    • CAPTCHA: Vấn đề lớn bạn có thể gặp phải khi scraping được thiết kế để phân biệt giữa người dùng và bot, CAPTCHA yêu cầu người dùng hoàn thành các nhiệm vụ như nhận diện hình ảnh hoặc nhập văn bản.
    • Chặn IP: Các trang web có thể chặn các địa chỉ IP liên quan đến hoạt động scraping để ngăn chặn yêu cầu quá mức.
    • Phát hiện User-Agent: Phát hiện User-Agent không chuẩn hoặc đáng ngờ giúp các trang web xác định và chặn các bot scraping.
    • Trang web động: Các trang web sử dụng nội dung JavaScript động có thể gây khó khăn vì nội dung có thể không truy cập được trực tiếp thông qua phân tích HTML tĩnh của Cheerio.

Là một nhà phát triển scraping web, việc hiểu rõ những thách thức này là rất quan trọng để giải quyết chúng hiệu quả. Có nhiều chiến lược để giảm thiểu các vấn đề này, và trong các phần tiếp theo, chúng tôi sẽ giải thích cách giải quyết hai vấn đề lớn nhất trong scraping: giải CAPTCHA và xử lý trang động:

Xử lý CAPTCHA trong scraping web

CAPTCHA tạo ra thách thức lớn trong scraping web vì chúng được thiết kế để phân biệt giữa người dùng và bot. Khi gặp phải, script scraping của bạn phải giải CAPTCHA để tiếp tục hiệu quả. Đối với các dự án scraping quy mô lớn, các giải pháp như CapSolver cung cấp khả năng giải CAPTCHA chính xác cao và nhanh chóng.

Tích hợp các công cụ giải CAPTCHA

Nhiều dịch vụ giải CAPTCHA có thể được tích hợp vào script scraping của bạn. Dưới đây, chúng tôi tập trung vào CapSolver:

Bước 1: Đăng ký CapSolver

Để bắt đầu, truy cập vào bảng điều khiển CapSolver và đăng ký tài khoản của bạn.

Bước 2: Nhận khóa API của bạn

Sau khi đăng ký, hãy lấy khóa API của bạn từ trang chủ.

Mã mẫu tích hợp CapSolver

Việc tích hợp CapSolver vào dự án scraping hoặc tự động hóa của bạn là đơn giản. Dưới đây là ví dụ bằng Python cho thấy cách sử dụng API của CapSolver:

python Copy
# pip install requests
import requests
import time

# TODO: thiết lập cấu hình của bạn
api_key = "KHÓA_API_CỦA_BẠN"  # khóa API của CapSolver
site_key = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"  # khóa site reCAPTCHA của trang đích
site_url = ""  # URL của trang đích


def solve_captcha():
    payload = {
        "clientKey": api_key,
        "task": {
            "type": 'ReCaptchaV2TaskProxyLess',
            "websiteKey": site_key,
            "websiteURL": site_url
        }
    }
    res = requests.post("https://api.capsolver.com/createTask", json=payload)
    resp = res.json()
    task_id = resp.get("taskId")
    if not task_id:
        print("Không thể tạo nhiệm vụ:", res.text)
        return
    print(f"Nhận taskId: {task_id} / Đang lấy kết quả...")

    while True:
        time.sleep(3)  # thời gian chờ
        payload = {"clientKey": api_key, "taskId": task_id}
        res = requests.post("https://api.capsolver.com/getTaskResult", json=payload)
        resp = res.json()
        status = resp.get("status")
        if status == "ready":
            return resp.get("solution", {}).get('gRecaptchaResponse')
        if status == "failed" or resp.get("errorId"):
            print("Giải CAPTCHA thất bại! Trả lời:", res.text)
            return


captcha_token = solve_captcha()
print(captcha_token)

Script này minh họa cách sử dụng API của CapSolver để giải các thách thức reCAPTCHA. Việc tích hợp giải pháp này vào dự án scraping của bạn sẽ tăng hiệu quả bằng cách tự động hóa việc giải CAPTCHA, từ đó làm cho quy trình trích xuất dữ liệu trở nên mượt mà hơn.

Xử lý trang động

Đối với các trang web tải nội dung động thông qua JavaScript, bạn có thể cần sử dụng trình duyệt không đầu (headless browser) như puppeteer. Puppeteer có thể mô phỏng hành vi của người dùng duyệt web, cho phép bạn trích xuất nội dung chỉ xuất hiện sau khi thực thi JavaScript.

Ví dụ với Puppeteer

Dưới đây là một ví dụ ngắn về cách sử dụng Puppeteer cùng với Cheerio:

javascript Copy
const puppeteer = require('puppeteer');
const cheerio = require('cheerio');

async function fetchData() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');

  const content = await page.content();
  const $ = cheerio.load(content);

  const title = $('title').text();
  const headings = [];
  $('h1, h2, h3').each((index, element) => {
    headings.push($(element).text());
  });

  console.log('Tiêu đề:', title);
  console.log('Tiêu đề:', headings);

  await browser.close();
}

fetchData();

Script này khởi chạy trình duyệt không đầu, điều hướng đến URL đích và lấy nội dung HTML sau khi thực thi JavaScript. Sau đó, nó sử dụng Cheerio để phân tích HTML và trích xuất dữ liệu mong muốn.

Kết luận

Scraping web với Cheerio và Node.js là sự kết hợp mạnh mẽ để trích xuất dữ liệu từ trang web một cách hiệu quả. Cú pháp giống jQuery của Cheerio giúp bạn dễ dàng duyệt và thao tác tài liệu HTML, trong khi Node.js cung cấp môi trường vững chắc để xử lý yêu cầu HTTP và xử lý dữ liệu.

Tuy nhiên, các nhà phát triển cần nhận thức về các thách thức do nội dung động và các biện pháp chống scraping như CAPTCHA. Việc tích hợp các giải pháp như CapSolver có thể giúp vượt qua những trở ngại này, đảm bảo script scraping của bạn vẫn hiệu quả và đáng tin cậy.

Tôi hy vọng bài viết này giúp bạn bắt đầu với scraping web vào năm 2026 và cung cấp dữ liệu hữu ích cho các dự án của bạn!

Tuyên bố Tuân thủ: Thông tin được cung cấp trên blog này chỉ mang tính chất tham khảo. CapSolver cam kết tuân thủ tất cả các luật và quy định hiện hành. Việc sử dụng mạng lưới CapSolver cho các hoạt động bất hợp pháp, gian lận hoặc lạm dụng là hoàn toàn bị cấm và sẽ bị điều tra. Các giải pháp giải captcha của chúng tôi nâng cao trải nghiệm người dùng trong khi đảm bảo tuân thủ 100% trong việc giúp giải quyết các khó khăn về captcha trong quá trình thu thập dữ liệu công khai. Chúng tôi khuyến khích việc sử dụng dịch vụ của chúng tôi một cách có trách nhiệm. Để biết thêm thông tin, vui lòng truy cập Điều khoản Dịch vụ và Chính sách Quyền riêng tư.

Thêm

Thu thập dữ liệu từ web với Selenium và Python
Gỡ mã nguồn trang web với Selenium và Python | Giải Captcha khi gỡ mã nguồn trang web

Trong bài viết này, bạn sẽ làm quen với trích xuất dữ liệu từ web bằng Selenium và Python, và học cách giải mã Captcha liên quan đến quy trình để trích xuất dữ liệu hiệu quả.

web scraping
Logo of CapSolver

Aloísio Vítor

04-Dec-2025

Web Scraping bằng Golang với Colly
Thu thập dữ liệu từ web trong Golang với Colly

Trong bài viết này, chúng tôi khám phá thế giới của việc trích xuất dữ liệu web bằng Golang với thư viện Colly. Hướng dẫn bắt đầu bằng việc giúp bạn thiết lập dự án Golang và cài đặt gói Colly. Sau đó, chúng tôi hướng dẫn từng bước tạo một công cụ trích xuất cơ bản để trích xuất liên kết từ một trang Wikipedia, minh họa tính dễ sử dụng và tính năng mạnh mẽ của Colly.

web scraping
Logo of CapSolver

Aloísio Vítor

04-Dec-2025

Web Scraping là gì?
Web Scraping là gì | Các trường hợp sử dụng phổ biến và vấn đề

Tìm hiểu về web scraping: học về lợi ích của nó, giải quyết các thách thức một cách dễ dàng, và nâng cao doanh nghiệp của bạn với CapSolver.

web scraping
Logo of CapSolver

Emma Foster

03-Dec-2025

Puppeteer là gì?
What là puppeteer và cách sử dụng trong việc thu thập dữ liệu web | Hướng dẫn hoàn chỉnh 2026

Hướng dẫn đầy đủ này sẽ đi sâu vào việc Puppeteer là gì và cách sử dụng nó hiệu quả trong web scraping.

web scraping
Logo of CapSolver

Aloísio Vítor

03-Dec-2025

Cách tạo công cụ thu thập dữ liệu từ web bằng trí tuệ nhân tạo (Hướng dẫn dành cho người mới bắt đầu)
Cách tạo một trình thu thập dữ liệu web cho AI Agent (Bài hướng dẫn dành cho người mới bắt đầu)

Học cách tạo một trình thu thập dữ liệu AI từ đầu với hướng dẫn dễ hiểu cho người mới. Khám phá các thành phần cốt lõi, ví dụ mã code và cách vượt qua các biện pháp chống bot như CAPTCHAs để thu thập dữ liệu đáng tin cậy.

web scraping
Logo of CapSolver

Anh Tuan

02-Dec-2025

Công cụ Trí tuệ nhân tạo bỏ chặn web để quét dữ liệu web
Công cụ Trí tuệ nhân tạo để bỏ chặn web trích xuất dữ liệu | Giải Captcha tự động

AI Web Unlocker tự động hóa việc giải CAPTCHA để truy xuất dữ liệu từ web mượt mà, không gián đoạn và truy cập dữ liệu đáng tin cậy.

web scraping
Logo of CapSolver

Anh Tuan

24-Nov-2025