AI & AUTOMATIONSELF HOSTING

Crawlee – Xây crawler web đáng tin cậy cho AI, RAG và automation

Tóm tắt nhanh:

  • Crawlee là thư viện web scraping và browser automation mã nguồn mở cho JavaScript và Python, giúp bạn xây dựng crawler đáng tin cậy, chống chặn tốt, phù hợp cho AI, LLM, RAG và các pipeline dữ liệu.
  • Thư viện cung cấp sẵn CheerioCrawler, PuppeteerCrawler, PlaywrightCrawler, hàng đợi URL, lưu trữ dataset, proxy rotation và session management, giúp bạn tập trung vào logic trích xuất dữ liệu thay vì dựng lại hạ tầng.
  • Bạn có thể khởi tạo dự án Crawlee chỉ với npx crawlee create my-crawler cho Node.js hoặc dùng Crawlee Python để viết crawler dùng HTTP hoặc headless browser, sau đó dễ dàng deploy lên Apify platform hoặc hạ tầng self-hosted.

Crawlee là thư viện web scraping được phát triển bởi Apify, kế thừa và nâng cấp từ Apify SDK với trọng tâm mới là crawling và scraping thuần túy. Thay vì chỉ là một wrapper quanh HTTP request hay headless browser, Crawlee cung cấp hẳn một framework: crawler class, queue, dataset, proxy, session và lifecycle hooks.

Đối với những bài toán AI và RAG, việc chuẩn bị dữ liệu là một phần cực lớn trong pipeline. Crawlee cho phép bạn thu thập dữ liệu từ các website công khai một cách có tổ chức, gom vào dataset, sau đó nối thẳng vào bước indexing, embedding và vector search. Điều này đặc biệt hữu ích khi bạn muốn xây dựng nguồn dữ liệu riêng cho LLM hoặc chatbot.

Những tính năng chính của Crawlee

Ở mức framework, Crawlee cung cấp rất nhiều thành phần đã được battle-tested cho web scraping:

  • Ba loại crawler chính (JS): CheerioCrawler (HTTP + HTML parsing), PuppeteerCrawlerPlaywrightCrawler (headless browser crawling).
  • Queue và scheduler: RequestQueue giúp quản lý danh sách URL theo breadth-first hoặc depth-first, kiểm soát retry và error handling.
  • Dataset và storage: dữ liệu trích xuất được push vào dataset, sau đó có thể xuất ra JSON, CSV, Excel… tuỳ mục đích.
  • Proxy rotation và session management: tích hợp sẵn hỗ trợ đổi proxy, quản lý session để giảm nguy cơ bị chặn.
  • Hook lifecycle và routing: bạn có thể cấu hình requestHandler, hooks trước/sau request, router theo pattern URL.

Ở phía Python, Crawlee giữ tinh thần tương tự: là một thư viện web scraping và browser automation với các abstraction tương đương, giúp bạn viết crawler Python theo phong cách framework thay vì viết script ad-hoc.

Yêu cầu môi trường và cài đặt cơ bản

Để sử dụng Crawlee trong dự án mới, bạn cần chuẩn bị:

  • JavaScript / Node.js
  • Node.js phiên bản 16 trở lên.
  • NPM hoặc Yarn để quản lý dependencies.
  • Python
  • Python 3.9+ (tuỳ hướng dẫn).
  • Pip/Poetry để cài đặt Crawlee Python và các thư viện liên quan.

Crawlee là thư viện mã nguồn mở, bạn có thể chạy local, trên server tự host hoặc deploy lên Apify platform nếu muốn tận dụng actor, scheduler, storage trên cloud.

Khởi tạo dự án Crawlee cho Node.js bằng CLI

Cách nhanh nhất để bắt đầu với Crawlee là dùng CLI cho Node.js. Trong terminal, chạy:

npx crawlee create my-crawler

CLI sẽ:

  1. Tải và cài đặt gói Crawlee nếu bạn chưa cài.
  2. Hiển thị danh sách template, ví dụ: Getting Started Example (JavaScript), Playwright JavaScript, CheerioCrawler v.v.
  3. Tạo thư mục my-crawler chứa package.json, nguồn code mẫu và script npm start.

Sau khi CLI hoàn tất, bạn chuyển vào thư mục:

cd my-crawler
npm start

Script mặc định thường sẽ crawl chính trang Crawlee và in ra tiêu đề các link – đây là ví dụ đơn giản giúp bạn kiểm tra mọi thứ hoạt động bình thường.

Ví dụ Crawler đơn giản với CheerioCrawler

Nếu bạn muốn bắt đầu bằng crawler HTTP đơn giản, Crawlee cung cấp CheerioCrawler – rất phù hợp cho website không quá phức tạp, không đòi hỏi JavaScript rendering:

import { CheerioCrawler } from 'crawlee';

const crawler = new CheerioCrawler({
  async requestHandler({ request, $, enqueueLinks, log }) {
    const { url } = request;

    // Lấy title trang
    const title = $('title').text();
    log.info(`Title of ${url}: ${title}`);

    // Tự động enqueue thêm link phù hợp pattern
    await enqueueLinks({
      globs: ['https://example.com/*'],
    });
  },
});

await crawler.run(['https://example.com/']);

Với vài dòng code, bạn đã có một crawler:

  • Bắt đầu từ một URL.
  • Trích xuất title.
  • Tự động thêm link mới vào queue.

Phần còn lại (retry, proxy, queue persistence…) Crawlee lo giùm bạn.

Ví dụ Crawler dùng Browser với PlaywrightCrawler

Khi website sử dụng nhiều JavaScript, dynamic content hoặc cần thao tác phức tạp, bạn nên dùng PuppeteerCrawler hoặc PlaywrightCrawler. Ví dụ với PlaywrightCrawler:

import { PlaywrightCrawler } from 'crawlee';

const crawler = new PlaywrightCrawler({
  async requestHandler({ page, request, log }) {
    const { url } = request;

    // Chờ nội dung load
    await page.waitForSelector('h3');

    // Lấy text của tất cả thẻ h3
    const titles = await page.$$eval('h3', els =>
      els.map(el => el.textContent?.trim())
    );

    log.info(`Found ${titles.length} titles on ${url}`);
  },
});

await crawler.run(['https://books.toscrape.com/']);

Với crawler dạng browser, bạn có thể:

  • Điều khiển trình duyệt headless (Chromium, Firefox, WebKit).
  • Chạy script trong bối cảnh trang (DOM).
  • Tương tác với UI (click, fill form, navigation…).

Điều này rất hữu ích cho web hiện đại, SPA hoặc trang có logic hiển thị phức tạp.

Dùng Crawlee Python cho Web Scraping và Automation

Nếu bạn quen Python, Crawlee cũng có phiên bản dành cho Python, cung cấp API tương tự để xây crawler có thể mở rộng. Ví dụ cấu trúc chung (pseudo):

from crawlee import HttpCrawler

class MyCrawler(HttpCrawler):
    async def handle_request(self, request, html):
        # Phân tích HTML, trích xuất data
        title = html.select_one("title").text
        print("Title:", title)

        # Enqueue thêm link nếu cần
        await self.enqueue_links(request, patterns=["https://example.com/*"])

crawler = MyCrawler()
crawler.run(start_urls=["https://example.com/"])

Điểm mạnh của Crawlee Python là tích hợp tốt với stack data/AI bằng Python: bạn có thể:

  • Crawl xong là chuyển ngay sang bước làm sạch dữ liệu, phân tích, embedding, RAG.
  • Tận dụng ecosystem Python (Pandas, NumPy, LangChain, v.v.) trong cùng project.

Tích hợp Crawlee với Apify Platform và Deploy Actor

Ngoài chạy local, bạn có thể deploy crawler lên Apify platform để tận dụng:

  • Actor (serverless microservice).
  • Storage trên cloud (Key-value store, Dataset, RequestQueue).
  • Proxy, scheduler, webhook…

Kịch bản cơ bản với JavaScript:

import { Actor } from 'apify';
import { CheerioCrawler } from 'crawlee';

await Actor.main(async () => {
  const crawler = new CheerioCrawler({
    async requestHandler({ request, $, enqueueLinks }) {
      const { url } = request;
      const title = $('title').text();

      console.log(`Title of ${url}: ${title}`);

      await enqueueLinks({ globs: ['https://www.iana.org/*'] });

      await Actor.pushData({ url, title });
    },
  });

  await crawler.run(['https://www.iana.org/']);
});

Bạn có thể chạy actor này local bằng apify run, sau đó apify push để deploy lên Apify platform. Việc kết hợp Crawlee với Apify giúp bạn có một stack hoàn chỉnh: từ crawler, storage, proxy đến quản lý lịch chạy, thông báo.

Ứng dụng Crawlee trong bài toán AI, RAG và tự động hoá

Đối với developer làm AI và RAG, Crawlee là một mảnh ghép quan trọng trong pipeline dữ liệu:

  • Thu thập nguồn dữ liệu: crawl blog, docs, FAQ, repo, trang sản phẩm để xây knowledge base cho chatbot hoặc hệ thống hỏi đáp.
  • Cập nhật dữ liệu liên tục: dùng scheduler để crawl định kỳ, update dataset, sau đó trigger lại bước indexing/embedding.
  • Chuẩn hoá dữ liệu cho LLM: trích xuất nội dung theo template, gắn metadata (source, timestamp, tag) để phục vụ truy vấn vector và filter.
  • Automation ngoài web scraping: tự động đăng nhập, thao tác form, thu thập báo cáo định kỳ từ hệ thống nội bộ (khi được phép).

Crawlee giúp bạn tập trung vào logic “lấy dữ liệu gì, từ đâu, ở dạng nào”, thay vì mất thời gian tái tạo những phần hạ tầng crawling đã được cộng đồng giải quyết.

Best practices khi dùng Crawlee trong production

Để tận dụng tối đa Crawlee mà vẫn giữ hệ thống ổn định, một số lưu ý hữu ích:

  • Tách rõ layer crawling và processing: dùng Crawlee để thu thập và lưu dataset; xử lý tiếp (cleaning, enrichment, embedding) ở layer khác.
  • Luôn bật proxy rotation và session management nếu site có anti-bot.
  • Thiết kế cấu trúc request queue hợp lý: phân chia theo domain, depth, pattern để tránh crawl lan man.
  • Gắn log và metrics: theo dõi số request, tỉ lệ lỗi, tỉ lệ retry, thời gian xử lý mỗi URL để tối ưu dần.
  • Tôn trọng robots.txt và điều khoản sử dụng: Crawlee rất mạnh, nhưng bạn cần đảm bảo tuân thủ pháp lý và đạo đức khi crawl.

Nếu bạn đang xây dựng hệ thống RAG, chatbot tài liệu, hay bất kỳ pipeline AI nào phụ thuộc vào dữ liệu từ web, Crawlee là một lựa chọn rất đáng thử. Nó không chỉ là một thư viện “gọi HTTP”, mà là một framework hoàn chỉnh cho crawler: queue, dataset, proxy, headless browser và tích hợp với Apify platform.

Chỉ với vài lệnh npx crawlee create my-crawler, npm start hoặc tương đương trong Python, bạn đã có nền tảng vững chắc để biến việc thu thập dữ liệu từ web thành một phần có tổ chức, mở rộng được và dễ bảo trì trong toàn bộ stack AI của mình.

Duy Nghiện
Hãy làm khán giả, đừng làm nhân vật chính :)

You may also like

Nhận thông báo qua email
Nhận thông báo cho
guest

0 Bình luận
Mới nhất
Cũ nhất Nhiều like nhất