Scrapling: Framework Web Scraping Thích Ứng
Scrapling là framework scraping Python xây quanh một ý tưởng: selector phải sống sót qua một lần thiết kế lại trang, chứ không chỉ chạy được ở thời điểm hiện tại. Parser của nó tự định vị lại phần tử khi HTML trang thay đổi — đây mới là điểm nghẽn thật sự mà Scrapy hay BeautifulSoup chưa từng giải quyết. Nếu scraper của bạn cứ hỏng mỗi khi trang đổi markup, Scrapling xử lý đúng vấn đề đó — nó không cố thay thế mọi thứ khác trong stack của bạn.
Scrapling Là Gì?
Scrapling là framework scraping mã nguồn mở viết bằng Python, gộp chung việc gửi request, tự động hoá trình duyệt và phân tích HTML vào một thư viện duy nhất. Nó cung cấp ba loại fetcher — Fetcher cho HTTP thuần, StealthyFetcher cho các trang chặn bot, và DynamicFetcher cho tự động hoá trình duyệt đầy đủ — cùng lớp Spider kiểu Scrapy để crawl đồng thời và có thể tạm dừng, tiếp tục.
Tính Năng Chính
- ✓Ba lớp fetcher cho ba mục đích khác nhau: Fetcher cho HTTP thuần với TLS/header giả lập trình duyệt, StealthyFetcher cho Cloudflare Turnstile và các hàng rào chống bot khác, DynamicFetcher cho tự động hoá đầy đủ qua Playwright/Chrome.
- ✓Theo dõi phần tử thích ứng — parser nhớ ngữ cảnh của một phần tử và định vị lại nó bằng độ tương đồng sau khi HTML trang thay đổi, thay vì để selector fail thẳng.
- ✓Lớp Spider kiểu Scrapy với request đồng thời, giới hạn tốc độ theo từng domain, AutoThrottle tự điều chỉnh delay, và tạm dừng/tiếp tục theo checkpoint khi nhấn Ctrl+C.
- ✓Xoay proxy tích hợp sẵn, DNS-over-HTTPS để tránh rò rỉ DNS khi dùng proxy, và tuỳ chọn kết nối tới trình duyệt từ xa qua CDP thay vì tự khởi chạy trình duyệt cục bộ.
- ✓Bắt XHR/fetch nền (capture_xhr) — lấy luôn các response API mà trang tự gọi khi tải, để bạn không phải tự reverse-engineer các request mạng.
- ✓MCP server cho AI coding agent (Claude, Cursor) trích xuất nội dung có chọn lọc trước khi đưa cho model, cộng thêm Agent Skill dạy agent dùng đúng API hiện tại.
- ✓Chọn phần tử bằng CSS, XPath, filter, text, và regex trên cùng một parser, kèm method find_similar() để tìm các phần tử giống một phần tử bạn đã tìm được.
- ✓CLI (scrapling extract, scrapling shell) để kéo một trang ra .txt/.md/.html mà không cần viết script, kèm công cụ chuyển curl sang lệnh Scrapling ngay trong shell.
Bạn Có Thể Xây Gì Với Scrapling?
- •Công cụ theo dõi giá và tồn kho vẫn chạy được sau khi trang thương mại điện tử đổi giao diện, vì selector thích ứng tự định vị lại field giá và tồn kho thay vì trả về None.
- •Crawl toàn site đứng sau Cloudflare Turnstile bằng StealthyFetcher, kết hợp xoay proxy và AutoThrottle để không bị chặn giữa chừng.
- •Kéo toàn bộ catalog Shopify qua template ShopifySpider dựng sẵn — chạy một lần là lấy hết sản phẩm và biến thể qua chính JSON API của store.
- •Crawl chạy dài mà bạn có thể tạm dừng bằng Ctrl+C rồi chạy tiếp sau từ checkpoint, hữu ích cho job kéo dài hơn một phiên làm việc.
- •Backend scraping nối qua MCP cho AI coding agent, để agent nhận nội dung trang đã được trích xuất sẵn thay vì tốn token đọc HTML thô.
Cài Đặt Scrapling
Scrapling yêu cầu Python 3.10 trở lên. Cài bản cơ bản bằng pip install scrapling. README ghi rõ bản cài cơ bản này chỉ gồm parser engine và các dependency của nó, chưa có fetcher — bước cài thêm extras/trình duyệt cụ thể thì tài liệu này không nêu rõ, nên kiểm tra trang docs của repo trước khi dùng StealthyFetcher hoặc DynamicFetcher lần đầu.
Cách Dùng Cơ Bản Của Scrapling
Cách dùng cơ bản là import rồi gọi thẳng. Một GET đơn lẻ: ```python from scrapling.fetchers import Fetcher page = Fetcher.get('https://quotes.toscrape.com/') quotes = page.css('.quote .text::text').getall() ``` Với các trang chống bot, đổi sang fetcher khác và thêm `adaptive=True` để selector sống sót qua các lần đổi markup sau này: ```python from scrapling.fetchers import StealthyFetcher page = StealthyFetcher.fetch('https://example.com', headless=True) products = page.css('.product', adaptive=True) ``` Với crawl thật sự, kế thừa `Spider`, khai `start_urls`, rồi yield item từ `parse()` bất đồng bộ: ```python from scrapling.spiders import Spider, Response class MySpider(Spider): name = "demo" start_urls = ["https://example.com/"] async def parse(self, response: Response): for item in response.css('.product'): yield {"title": item.css('h2::text').get()} MySpider().start() ```
Điểm Mạnh
- ✓Một thư viện thay vì ba — thường thì fetch HTTP, fetch trình duyệt ẩn danh, và parsing phải tự ghép requests, Playwright, BeautifulSoup lại với nhau; Scrapling gộp cả ba với một API selector dùng chung.
- ✓Cơ chế định vị lại thích ứng là một cơ chế cụ thể thật sự, không phải câu quảng cáo — nó lưu ngữ cảnh phần tử rồi tìm lại bằng độ tương đồng, trả lời đúng vấn đề 'scraper hỏng vì ai đó đổi tên class CSS'.
- ✓Tạm dừng/tiếp tục qua checkpoint nghĩa là một crawl chạy nhiều giờ sống sót qua một lần Ctrl+C hay crash tiến trình, thay vì phải chạy lại từ URL đầu tiên.
- ✓Tích hợp trực tiếp với Scrapy (decorator scrapling_response) giúp đội đã có codebase Scrapy sẵn dùng được parser của Scrapling mà không cần viết lại.
Hạn Chế Của Scrapling
- △Lệnh pip install scrapling cơ bản chỉ cài parser — chính README cũng bị cắt ngang ngay đoạn giải thích fetcher extras cần gì, nên bạn cần tự tìm hiểu thêm flag cài đặt thay vì nghĩ một lệnh là xong hết.
- △StealthyFetcher và DynamicFetcher phụ thuộc vào trình duyệt thật (Playwright/Chrome), nghĩa là chịu chung cái giá của browser automation: image Docker nặng hơn, tốn RAM hơn, cold start chậm hơn fetcher HTTP thuần.
- △Theo dõi phần tử thích ứng dựa trên dữ liệu tương đồng đã lưu (auto_save=True) từ lần chạy trước — nếu bạn chưa từng lưu baseline, adaptive=True sẽ không có gì để đối chiếu mà định vị lại.
- △Framework Spider còn khá mới nên API của nó (route session theo sid, configure_sessions) chưa được thử lửa trong thực tế nhiều bằng Scrapy, vốn đã có bề mặt tương đương hơn một thập kỷ.
Lựa Chọn Thay Thế Cho Scrapling
Câu Hỏi Thường Gặp
Scrapling phát hành theo giấy phép BSD-3-Clause, cho phép dùng thương mại, sửa đổi và phân phối lại mà không cần trả phí bản quyền — bạn chỉ cần giữ nguyên thông báo bản quyền gốc.
StealthyFetcher của Scrapling dùng kỹ thuật giả lập fingerprint và tự động hoá trình duyệt ẩn danh để vượt qua Cloudflare Turnstile và Interstitial, giúp lượt scrape hoàn tất như một phiên trình duyệt thật thay vì bị chặn ngay từ đầu.
Fetcher gửi request HTTP thuần với TLS và header giả lập trình duyệt. StealthyFetcher thêm khả năng ẩn danh chống bot và vượt được Cloudflare Turnstile. DynamicFetcher điều khiển trình duyệt Playwright hoặc Chrome đầy đủ cho trang cần chạy JavaScript thật.
Framework Spider của Scrapling hỗ trợ tạm dừng và tiếp tục: tiến trình crawl được lưu checkpoint xuống đĩa, Ctrl+C kích hoạt tắt nhẹ nhàng, và chạy lại spider với cùng crawldir sẽ tiếp tục crawl từ chỗ đã dừng.
Parser của Scrapling lưu ngữ cảnh của một phần tử — tag, thuộc tính, text, vị trí — ngay lần đầu bạn cào nó với auto_save=True. Khi bạn query lại sau đó với adaptive=True, nó dùng so khớp độ tương đồng với ngữ cảnh đã lưu để định vị lại phần tử đó dù cấu trúc HTML trang đã đổi.
Scrapling hỗ trợ async trên tất cả fetcher và các lớp session — AsyncFetcher, callback Spider bất đồng bộ, và các loại session async riêng như AsyncStealthySession — nên crawl đồng thời và request song song chạy được với code asyncio/await thông thường.
Vấn Đề Scrapling Giải Quyết
Scraper viết dựa theo class CSS và đường dẫn XPath hiện tại của một trang sẽ hỏng ngay khi trang đó đổi markup — đội dev khi đó phải ngồi inspect lại DOM và vá từng selector một, tốn hàng giờ. Parser thích ứng của Scrapling ghi lại ngữ cảnh của phần tử (tag, thuộc tính, text, vị trí) một lần, rồi tự định vị lại phần tử đó sau khi trang thay đổi, để cùng một lệnh selector vẫn trả về đúng field logic thay vì kết quả rỗng.
Ai Nên Thử — Và Ai Nên Bỏ Qua
Nên thử Scrapling nếu bạn đang bảo trì scraper cho các trang hay đổi markup, hoặc đang chật vật vượt Cloudflare Turnstile với một bộ requests+BeautifulSoup trần và đang thua cuộc. Nó cũng hợp lý nếu bạn đang xây backend scraping nối qua MCP cho một coding agent — đó là ngách riêng mà Scrapy không phủ tới. Bỏ qua nó nếu bạn đã có pipeline Scrapy chạy production với middleware tuỳ biến sẵn; chi phí migrate nhiều khả năng vượt quá lợi ích của selector thích ứng, và chính Spider API của Scrapling cũng mượn ý tưởng từ Scrapy chứ không thay thế hệ sinh thái quanh nó.
Repo liên quan
Vẫn đang phân vân về Scrapling?
Một cú bấm sẽ gửi câu hỏi kèm trang này cho AI — xem AI nói gì về Scrapling.
