Cào Web Không Cần Chromium: Servo-Fetch Định Nghĩa Lại Tốc Độ Thu Thập Dữ Liệu
4 phút đọc
servo-fetch là một công cụ trình duyệt độc lập (self-contained browser engine) cực kỳ nhẹ được thiết kế để tải, xuất hình ảnh (render) và trích xuất nội dung trang web dưới dạng Markdown, JSON hoặc ảnh chụp màn hình. Điểm khác biệt lớn nhất của servo-fetch là nó hoạt động hoàn toàn không cần đến Chromium, không yêu cầu API key và không cần thiết lập môi trường phức tạp (zero setup).
Bằng cách nhúng trực tiếp engine trình duyệt Servo, công cụ này sử dụng SpiderMonkey để thực thi mã JavaScript thực tế và một engine CSS chạy song song để tính toán bố cục trang. Theo các bài kiểm tra hiệu năng, servo-fetch vượt trội hơn hẳn so với các ngăn xếp phổ biến dành cho AI agent như Playwright. Nó có tốc độ xử lý nhanh hơn 2-3 lần (khoảng 231ms so với 645ms) và tiêu tốn lượng bộ nhớ cực thấp (chỉ 50-64 MB RAM so với hơn 300 MB của Playwright).
Các tính năng nổi bật:
-
Trích xuất thông minh dựa trên bố cục: Khác với các công cụ cào HTML thông thường, servo-fetch nhận thức được bố cục trang (layout-aware). Nó tự động loại bỏ thanh điều hướng, thanh bên, chân trang, banner cookie hoặc các phần tử bị ẩn bằng CSS để trả về nội dung sạch.
-
Thực thi JavaScript thực: Xử lý tốt các trang web động (SPA) hiện đại.
-
Trích xuất JSON theo cấu trúc (Schema-driven): Cho phép bạn định nghĩa các cấu trúc dữ liệu mong muốn thông qua CSS selector để tự động kéo dữ liệu về thành mảng JSON.
-
Cào dữ liệu (Crawling) và tìm URL (Mapping): Hỗ trợ duyệt hàng loạt các liên kết trong cùng một trang web, tuân thủ tệp robots.txt và có giới hạn tần suất.
-
Chụp ảnh màn hình không cần GPU: Sử dụng trình xuất hình ảnh bằng phần mềm (software renderer), cho phép chụp toàn trang ngay cả trên các máy chủ không có card đồ họa.
-
Giao thức MCP tích hợp: Hỗ trợ sẵn Model Context Protocol (MCP) với 6 công cụ dành cho các AI Agent tương tác.
Hướng dẫn cài đặt
Tùy thuộc vào môi trường làm việc, bạn có thể lựa chọn cài đặt theo các phương thức sau:
1. Giao diện dòng lệnh (CLI):
Chạy lệnh curl sau để tải file cài đặt tự động:
curl -fsSL https://raw.githubusercontent.com/konippi/servo-fetch/main/install.sh | sh
Hoặc nếu bạn dùng Rust, có thể cài đặt trực tiếp qua cargo:
cargo binstall servo-fetch-cli
2. Thư viện Python:
Cài đặt dễ dàng thông qua pip:
pip install servo-fetch
3. Thư viện Rust:
Thêm vào dự án Rust của bạn:
cargo add servo-fetch
Cách dùng chi tiết
Phương thức 1: Sử dụng qua Giao diện dòng lệnh (CLI)
Đây là cách nhanh chóng nhất để thu thập dữ liệu web trực tiếp từ terminal.
-
Lấy nội dung sạch dưới dạng Markdown (Mặc định):
servo-fetch "https://example.com" -
Lấy dữ liệu dưới định dạng JSON:
servo-fetch "https://example.com" --format json -
Chụp ảnh màn hình toàn trang (Lưu thành file PNG):
servo-fetch "https://example.com" --screenshot page.png -
Thực thi một đoạn JavaScript tùy chỉnh trước khi lấy dữ liệu:
servo-fetch "https://example.com" --js "document.title" -
Tải nhiều URL cùng lúc (Chạy song song để tối ưu thời gian):
servo-fetch URL1 URL2 URL3 -
Cào toàn bộ một trang web (Crawl site) với giới hạn số trang cụ thể:
servo-fetch crawl "https://docs.example.com" --limit 20
Phương thức 2: Sử dụng bằng ngôn ngữ Python
Cách này cực kỳ hữu ích khi bạn đang xây dựng các luồng dữ liệu bằng Python hoặc tích hợp vào hệ thống AI.
-
Tải và lấy Markdown cơ bản:
Pythonimport servo_fetch page = servo_fetch.fetch("https://example.com") print(page.markdown) -
Trích xuất dữ liệu có cấu trúc bằng Schema:
Định nghĩa chính xác các phần tử cần lấy (như tiêu đề, giá cả) thông qua selector.
Pythonfrom servo_fetch import Schema, Field schema = Schema( base_selector=".product", fields=[ Field(name="title", selector="h2", type="text"), Field(name="price", selector=".price", type="text"), ], ) page = servo_fetch.fetch("https://shop.example.com", schema=schema) print(page.extracted)
Phương thức 3: Triển khai thành Máy chủ HTTP API / Dùng qua Docker
Nếu bạn cần một dịch vụ cào dữ liệu chạy độc lập để các ứng dụng khác gọi đến qua giao thức REST.
-
Khởi chạy máy chủ HTTP API tại máy cục bộ:
servo-fetch serve(Mặc định chạy ở 127.0.0.1:3000) -
Khởi chạy máy chủ thông qua Docker (An toàn và không phụ thuộc hệ điều hành):
docker run --rm -p 3000:3000 ghcr.io/konippi/servo-fetch:latest -
Gửi Request (cURL) tới API để lấy dữ liệu:
Bashcurl -X POST http://127.0.0.1:3000/v1/fetch \ -H 'content-type: application/json' \ -d '{"url":"https://example.com"}'
Đọc tiếp trong Vọc vạch
Công Thức Lên Ý Tưởng Video Vô Hạn D - I - C - Y
3 phút đọc
Abogen: Giải Pháp Tạo Sách Nói Và Lồng Tiếng Toàn Diện
5 phút đọc
Tuyệt Chiêu Biến AI Thành Trợ Lý Đa Năng Cùng Awesome MCP Servers
3 phút đọc
Hướng Dẫn Cài Đặt Và Sử Dụng Anything To NotebookLM: Biến Mọi Định Dạng Nội Dung Thành Podcast, PPT Và Mindmap
2 phút đọc