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

Tabproxy
Tabproxy: Dịch vụ proxy nhà ở giá trị tốt cho khu vực nước ngoài

Trong bài viết này, chúng tôi sẽ giới thiệu cho bạn Tabproxy là gì và các dịch vụ mà họ cung cấp.

web scraping
Logo of CapSolver

Anh Tuan

12-Dec-2025

lỗi trích xuất dữ liệu từ web
Các lỗi 402, 403, 404 và 429 là gì trong việc quét web? Hướng dẫn toàn diện

Nắm vững xử lý lỗi quét web bằng cách hiểu các lỗi 402, 403, 404 và 429. Học cách sửa lỗi 403 Cấm, triển khai giải pháp xử lý lỗi 429 và xử lý mã trạng thái 402 Yêu cầu thanh toán mới xuất hiện.

web scraping
Logo of CapSolver

Lucas Mitchell

12-Dec-2025

Trích xuất dữ liệu từ web bằng Python
Web Scraping Với Python: 2026 Các Chiến Thuật Tốt Nhất

Học các chiến thuật hàng đầu về quét web bằng Python năm 2026, bao gồm xử lý nội dung JavaScript động, quản lý các luồng xác thực, giải CAPTCHAs, nhận diện các bẫy ẩn, mô phỏng hành vi của con người, tối ưu hóa các mẫu yêu cầu và giảm tiêu thụ tài nguyên trong các dự án quét web quy mô lớn.

web scraping
Logo of CapSolver

Emma Foster

12-Dec-2025

Giải quyết Captcha khi quét trang web
Thu thập dữ liệu web mà không bị chặn và cách giải Captcha

Quét web đã trở thành kỹ thuật phổ biến để trích xuất dữ liệu từ trang web. Tuy nhiên, nhiều trang web sử dụng các biện pháp chống quét web, bao gồm...

web scraping
Logo of CapSolver

Nikolai Smirnov

11-Dec-2025

Crawling web và Trích xuất dữ liệu web
Khác biệt cơ bản giữa Khám phá web và Trích xuất web

Khám phá sự khác biệt cơ bản giữa quét web và trích xuất dữ liệu web. Tìm hiểu mục đích khác nhau của chúng, 10 trường hợp sử dụng mạnh mẽ, và cách CapSolver giúp vượt qua các rào cản AWS WAF và CAPTCHA để thu thập dữ liệu mượt mà.

web scraping
Logo of CapSolver

Anh Tuan

09-Dec-2025

Cách giải Captchas khi web scraping với Scrapling và CapSolver
Cách giải Captchas khi quét web bằng Scrapling và CapSolver

Scrapling + CapSolver cho phép quét trang web tự động với việc vượt qua ReCaptcha v2/v3 và Cloudflare Turnstile.

web scraping
Logo of CapSolver

Anh Tuan

05-Dec-2025