Sản phẩmTích hợpTài nguyênTài liệuGiá cả
Bắt đầu ngay

© 2026 CapSolver. All rights reserved.

Liên hệ chúng tôi

Slack: lola@capsolver.com

Sản phẩm

  • reCAPTCHA v2
  • reCAPTCHA v3
  • Cloudflare Turnstile
  • Cloudflare Challenge
  • AWS WAF
  • Tiện ích trình duyệt
  • Thêm nhiều loại CAPTCHA

Tích hợp

  • Selenium
  • Playwright
  • Puppeteer
  • n8n
  • Đối tác
  • Xem tất cả tích hợp

Tài nguyên

  • Chương trình giới thiệu
  • Tài liệu
  • Tham chiếu API
  • Blog
  • Câu hỏi thường gặp
  • Thuật ngữ
  • Trạng thái

Pháp lý

  • Điều khoản dịch vụ
  • Chính sách bảo mật
  • Chính sách hoàn tiền
  • Không bán thông tin cá nhân của tôi
Blog/The Other CAPTCHA/Gian hàng web với Cheerio và Node.js 2026
Jun14, 2024

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

Anh Tuan

Anh Tuan

Data Science Expert

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 axios và cheerio.
  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!

Xem thêm

The Other CAPTCHAApr 03, 2026

Cách xử lý các rào cản khi quét web: Các phương pháp thực tế hiệu quả

Học cách xử lý các rào cản khi trích xuất dữ liệu từ web một cách hiệu quả. Khám phá các phương pháp thực tế, những hiểu biết kỹ thuật về phát hiện bot và các giải pháp đáng tin cậy để trích xuất dữ liệu.

Ethan Collins
Ethan Collins
The Other CAPTCHAApr 03, 2026

Giải Thích Thời Gian Phản Hồi API Giải CAPTCHA: Yếu Tố Tốc Độ & Hiệu Suất

Hiểu rõ thời gian phản hồi của API giải CAPTCHA, tác động của nó đến tự động hóa và các yếu tố chính ảnh hưởng đến tốc độ. Học cách tối ưu hóa hiệu suất và tận dụng các giải pháp hiệu quả như CapSolver để giải CAPTCHA nhanh chóng.

Nội dung

Emma Foster
Emma Foster
The Other CAPTCHAApr 02, 2026

API Giải Quyết CAPTCHA Là Gì? Cách Hoạt Động Và Khi Nào Nên Sử Dụng

Hãy học cách CAPTCHA giải API là gì, cách hoạt động của nó và khi nào nên sử dụng nó cho tự động hóa. Khám phá lợi ích của việc giải CAPTCHA dựa trên AI cho việc quét web.

Sora Fujimoto
Sora Fujimoto
The Other CAPTCHAFeb 27, 2026

Thành thạo Thách thức CAPTCHA trong Việc Thu thập Dữ liệu Việc làm (Hướng dẫn 2026)

Một cẩm nang toàn diện để hiểu và vượt qua thách thức CAPTCHA trong trích xuất dữ liệu công việc. Học cách xử lý reCAPTCHA và những rào cản khác với các mẹo chuyên gia và ví dụ mã nguồn của chúng tôi.

Ethan Collins
Ethan Collins