ScrapeGraphAI: thư viện web scraping bằng AI cho Python
ScrapeGraphAI thay CSS selector viết tay bằng một prompt gửi cho LLM, nên khi trang đích đổi giao diện, pipeline không nhất thiết bị vỡ như khi dùng Scrapy. Điểm phải cân nhắc trước: mỗi trang tốn token LLM và trả JSON với hình dạng do LLM tự quyết định, nên nó hợp việc trích xuất thăm dò hơn một job phải chạy y hệt mỗi đêm. Nó có chỗ đứng cạnh một scraper truyền thống, chứ không thay thế hoàn toàn.
ScrapeGraphAI là gì?
ScrapeGraphAI là một thư viện Python kết hợp LLM với logic pipeline dạng graph để trích xuất dữ liệu có cấu trúc từ website và file cục bộ (XML, HTML, JSON, Markdown). Thay vì viết CSS selector hay XPath, bạn viết một prompt mô tả thứ cần trích xuất, và một pipeline dựng như graph gồm nhiều node sẽ gửi nội dung trang cho LLM rồi trả về JSON. Chuỗi bước dạng graph đó, chứ không phải một lệnh scrape đơn lẻ, là nguồn gốc cái tên.
Các pipeline scraping cốt lõi và chức năng của chúng
- ✓SmartScraperGraph trích xuất dữ liệu từ một trang hoặc file cục bộ chỉ cần một prompt và một nguồn — không cần viết selector.
- ✓SearchGraph chạy cùng kiểu trích xuất trên top kết quả của một truy vấn tìm kiếm, thay vì chỉ một URL.
- ✓SmartScraperMultiGraph áp một prompt cho cả danh sách nguồn cùng lúc, và mỗi pipeline đều có bản 'multi' tương ứng chạy song song các lệnh gọi LLM.
- ✓SpeechGraph biến một trang đã scrape thành file audio thay vì JSON.
- ✓ScriptCreatorGraph và ScriptCreatorMultiGraph sinh ra một Python script độc lập tái hiện lại thao tác scrape, thay vì chạy trực tiếp.
- ✓Backend LLM có thể cấu hình theo từng pipeline qua dict graph_config — OpenAI, Groq, Azure, Gemini, MiniMax, hoặc model cục bộ qua Ollama.
- ✓Cùng các pipeline dạng graph đó cũng parse được file XML, HTML, JSON, Markdown cục bộ, không chỉ website trực tiếp.
Cài đặt ScrapeGraphAI
Cài từ PyPI bằng `pip install scrapegraphai`. Để fetch website trực tiếp còn cần binary trình duyệt của Playwright, cài riêng bằng `playwright install` — bỏ qua bước này vẫn parse được file cục bộ (XML, HTML, JSON, Markdown), chỉ là không dùng được với URL trực tiếp. README khuyên cài trong virtual environment để tránh xung đột dependency. Bạn cũng cần thông tin xác thực cho LLM mà graph_config trỏ tới — API key cho OpenAI, Groq, Azure, Gemini, hay MiniMax, hoặc cài Ollama cục bộ với model đã pull sẵn — không cái nào đi kèm sẵn trong package.
Chạy lần scrape đầu tiên với SmartScraperGraph
Import SmartScraperGraph từ scrapegraphai.graphs, rồi dựng một dict graph_config khai tên model LLM (`ollama/llama3.2`, hoặc `openai/gpt-4o-mini` kèm api_key), cộng thêm cờ verbose và headless. Khởi tạo SmartScraperGraph với một prompt mô tả thứ cần trích xuất, một source URL, và config đó, rồi gọi `.run()`. Lệnh gọi trả về một dict Python thuần — ví dụ trong chính README trả về mô tả công ty, danh sách founder, và link mạng xã hội lấy từ một trang — bạn có thể đưa thẳng vào `json.dumps()`.
Bạn có thể xây dựng gì với ScrapeGraphAI?
- •Lấy dữ liệu công ty có cấu trúc — mô tả, founder, link mạng xã hội — từ một trang landing page cho tập dữ liệu lead-gen hay nghiên cứu, đúng ví dụ trong README của ScrapeGraphAI.
- •Tổng hợp câu trả lời từ top kết quả của một truy vấn tìm kiếm bằng SearchGraph thay vì scrape từng site một.
- •Đưa nội dung đã scrape vào một pipeline RAG dưới dạng JSON có cấu trúc thay vì HTML thô.
- •Sinh một Python script scraping độc lập bằng ScriptCreatorGraph để bàn giao logic scraping mà không cần phụ thuộc runtime vào thư viện.
- •Chuyển một bài viết đã scrape thành file audio qua SpeechGraph.
Điểm mạnh
- ✓Bỏ hẳn bước viết selector — một prompt ngôn ngữ tự nhiên đọc trang theo cách một người sẽ đọc, nên sống sót qua một lần redesign giao diện, điều sẽ làm vỡ một scraper dùng CSS selector.
- ✓Sáu loại pipeline bao quát hơn 'scrape một trang': SearchGraph lấy từ kết quả tìm kiếm, SmartScraperMultiGraph rải một prompt trên cả danh sách URL, còn ScriptCreatorGraph xuất ra một script độc lập thay vì chạy trực tiếp.
- ✓Không khoá cứng vào một LLM — đổi giữa OpenAI, Groq, Azure, Gemini, MiniMax, hay một model Ollama cục bộ chỉ bằng cách sửa dict graph_config.
- ✓Đã có sẵn tài liệu tích hợp với LangChain, Llama Index, Crew.ai, Agno, và vài nền tảng no-code (Zapier, n8n, Dify), nên cắm được vào một pipeline có sẵn thay vì bắt viết lại từ đầu.
- ✓Cấp phép MIT, nên bản thân thư viện mã nguồn mở này miễn phí để tự host và chỉnh sửa.
Hạn chế của thư viện mã nguồn mở
- △Scrape website trực tiếp phụ thuộc vào binary trình duyệt của Playwright, một bước cài riêng chứ không nằm trong gói pip.
- △Kết quả LLM không đảm bảo khớp một schema cố định ở mọi lần chạy, vì pipeline nhờ model tự cấu trúc trang thay vì parse bằng selector cố định.
- △Mỗi lần scrape tốn token LLM (hoặc compute cục bộ nếu dùng Ollama), cộng thêm chi phí vận hành bản thân thư viện.
- △Anonymous usage telemetry mặc định bật. Bạn phải chủ động set SCRAPEGRAPHAI_TELEMETRY_ENABLED=false để tắt.
- △Chính README nói thư viện này dành cho khám phá dữ liệu và nghiên cứu, không phải scraping quy mô production — cho việc đó, nhà phát triển hướng người dùng sang managed API trả phí riêng của họ.
Các lựa chọn thay thế ScrapeGraphAI
Các câu hỏi thường gặp
API key chỉ cần khi bạn trỏ ScrapeGraphAI vào một LLM được host như OpenAI, Groq, Azure, Gemini, hay MiniMax — bạn đặt key của nhà cung cấp đó vào dict graph_config. Chạy một model cục bộ qua Ollama thì không cần API key, chỉ cần cài Ollama với model đã pull sẵn.
Thư viện mã nguồn mở ScrapeGraphAI được cấp phép MIT, nên miễn phí để dùng, chỉnh sửa và tự host. Bạn vẫn phải trả cho backend LLM mà bạn kết nối tới — chẳng hạn phí dùng OpenAI hay Groq — vì bản thân thư viện không bao gồm chi phí LLM. ScrapeGraphAI cũng bán riêng một managed API cho các team không muốn tự host.
ScrapeGraphAI làm việc với OpenAI, Groq, Azure, Gemini, và MiniMax qua API của từng bên, cộng thêm model cục bộ chạy qua Ollama. Bạn chọn backend bằng cách đặt tên model trong dict graph_config truyền cho mỗi pipeline, kèm API key cho các nhà cung cấp có host hoặc không cần gì thêm với một model Ollama cục bộ.
Web scraping truyền thống bằng Scrapy hay Beautiful Soup thường nhanh và rẻ hơn trên mỗi trang, vì parse HTML trực tiếp mà không qua lệnh gọi LLM nào, nhưng đòi hỏi viết và bảo trì selector cho từng site. ScrapeGraphAI đánh đổi tốc độ và chi phí đó lấy một prompt ngôn ngữ tự nhiên đọc giống một chỉ dẫn cho người, giúp giảm thời gian setup khi bạn chỉ scrape một site một hoặc hai lần.
ScrapeGraphAI có tài liệu tích hợp với cả LangChain và Llama Index, cùng với Crew.ai, Agno, và CamelAI, nên pipeline scraping của nó cắm được vào một LLM framework có sẵn thay vì phải chạy độc lập.
Ngoài website trực tiếp, ScrapeGraphAI chạy được pipeline trích xuất trên file XML, HTML, JSON, và Markdown cục bộ bằng đúng cách tiếp cận dựa trên prompt mà nó dùng cho một URL. Điều này giúp nó dùng được để cấu trúc hoá tài liệu có sẵn, không chỉ crawl web.
Vấn đề ScrapeGraphAI giải quyết
Viết và bảo trì CSS selector hay XPath cho từng trang đích là việc dễ vỡ: một lần thiết kế lại giao diện là scraper hỏng, và một script được chỉnh để lấy 'tên founder và link mạng xã hội' từ một trang công ty hiếm khi dùng lại trơn tru cho trang tiếp theo. ScrapeGraphAI thay bước viết selector đó bằng một prompt ngôn ngữ tự nhiên để LLM đọc trên trang, nên cùng một prompt có thể trỏ sang markup của một site khác mà không cần viết lại.
Ai nên dùng — và ai nên bỏ qua
Developer đã có sẵn subscription LLM và đang prototype một job trích xuất — lấy dữ liệu có cấu trúc từ vài trang, nạp cho một pipeline RAG, hay tạo một tập dữ liệu one-off — sẽ tận dụng ScrapeGraphAI tốt nhất, vì viết một prompt nhanh hơn việc dò ngược DOM của trang. Team chạy scraper trên hàng nghìn trang theo lịch, nơi chi phí token và việc schema đầu ra trôi dạt thực sự quan trọng, nên dùng một scraper dựa trên selector như Scrapy, hoặc dùng managed API riêng của ScrapeGraphAI — nơi họ xử lý proxy và chống chặn bot với phí tính theo credit.
Repo liên quan
Scrapegraph-ai có đáng để bạn bỏ thời gian?
ChatGPT, Claude và Perplexity đều đọc được trang này. Hỏi thử xem họ nghĩ gì về Scrapegraph-ai.
