MediaCrawler: “Vũ khí bí mật” thu thập dữ liệu đa nền tảng cho AI và phân tích nội dung
Tóm tắt nhanh:
- MediaCrawler là framework crawler mã nguồn mở, hỗ trợ nhiều nền tảng như Xiaohongshu, Douyin, Kuaishou, Bilibili, Weibo, Baidu Tieba, Zhihu… để thu thập bài viết, video, bình luận và thông tin creator ở quy mô lớn.
- Dự án tận dụng Playwright và trình duyệt thật để vượt qua lớp anti-bot phức tạp, giúp bạn tập trung vào phân tích dữ liệu hoặc xây dựng AI agent mà không phải tự reverse-engineer JavaScript mã hóa.
- Hệ sinh thái hỗ trợ từ CSV/JSON đến SQLite/MySQL, kết hợp workflow với LLM (GPT, Claude…) rất phù hợp cho content creator, nhà phân tích dữ liệu, marketer và developer đang xây dựng hệ thống AI/ML tự động hóa.
MediaCrawler là một dự án crawler đa nền tảng được viết bằng Python, thiết kế chuyên cho việc thu thập nội dung và tương tác công khai trên các nền tảng social như Xiaohongshu, Douyin, Kuaishou, Bilibili, Weibo, Baidu Tieba và Zhihu. Thay vì phải tự viết từng crawler riêng lẻ, bạn có thể dùng một framework thống nhất với cấu hình rõ ràng, command line nhất quán và khả năng mở rộng để thêm nền tảng mới.
Bạn có thể tham khảo trực tiếp mã nguồn tại:
- Repo GitHub: https://github.com/NanmiCoder/MediaCrawler
- Trang tài liệu: https://nanmicoder.github.io/MediaCrawler/
Khi nào nên dùng MediaCrawler
MediaCrawler phù hợp khi bạn cần:
- Thu thập dữ liệu nhiều nền tảng cùng lúc (ví dụ Xiaohongshu + Douyin + Bilibili) để làm phân tích nội dung, nghiên cứu thị trường, social listening.
- Tự xây dựng kho dữ liệu cho AI agent (recommendation, trend analysis, content ideation) mà vẫn đảm bảo cấu trúc dữ liệu nhất quán giữa các nguồn.
- Tránh việc tự reverse JavaScript mã hóa request trên từng site, tận dụng Playwright và môi trường trình duyệt thật để giữ login session, cookie và tham số bảo mật ổn định.
Các tính năng chính
MediaCrawler gói sẵn nhiều khả năng mà một crawler production-grade cần có:
- Hỗ trợ đa nền tảng social: Xiaohongshu, Douyin, Kuaishou, Bilibili, Weibo, Baidu Tieba, Zhihu… với focus vào bài viết, video, comment và các meta dữ liệu liên quan.
- Chế độ thu thập theo từ khóa hoặc danh sách ID: bạn có thể crawl theo keyword để tìm bài hot, hoặc cung cấp danh sách post ID để thu thập chi tiết từng nội dung và comment cấp 1, cấp 2.
- Kết nối Playwright và Chrome thật: dự án dùng Playwright để tạo session login, thực thi JavaScript lấy tham số mã hóa mà không cần viết lại toàn bộ logic anti-bot của từng nền tảng.
- Tùy chọn lưu CSV, JSON, SQLite hoặc MySQL: cho phép bạn chọn cách lưu phù hợp với workflow phân tích hoặc pipeline AI hiện có.
Nền tảng hỗ trợ và dữ liệu thu thập
| Nền tảng | Loại dữ liệu chính (ví dụ) |
|---|---|
| Xiaohongshu | Bài viết, hình ảnh, comment, thông tin creator. |
| Douyin | Video, caption, lượt thích, comment, tương tác. |
| Kuaishou | Video, thống kê tương tác, comment. |
| Bilibili | Video, mô tả, danmaku/comment, thông tin kênh. |
| Status, repost, like, comment chuỗi. | |
| Baidu Tieba | Thread, reply, cấu trúc thảo luận. |
| Zhihu | Q&A, bài viết, comment. |
Kiến trúc và nền tảng hỗ trợ
MediaCrawler được thiết kế như một framework crawler bất đồng bộ với cấu trúc rõ ràng: config, core crawler, adapters cho từng nền tảng và các module lưu trữ dữ liệu. Cách thiết kế này khiến việc tối ưu hiệu năng (concurrency, queue, retry) và mở rộng sang nền tảng mới trở nên đơn giản và có thể tái sử dụng trong nhiều dự án khác nhau.
Về mặt triển khai, dự án khuyến nghị dùng Python 3.11, kết hợp với trình quản lý môi trường và dependency uv để đảm bảo phiên bản đồng nhất và dễ tái lập môi trường.
Chuẩn bị môi trường phát triển
Trước khi cài đặt, bạn cần chuẩn bị một số thành phần cơ bản:
- Python: khuyến nghị dùng Python 3.11 vì dependency của dự án được build trên phiên bản này.
- Node.js: bắt buộc nếu bạn muốn crawl các nền tảng như Douyin, Zhihu; yêu cầu Node.js từ phiên bản 16 trở lên.
- Playwright: dùng để điều khiển trình duyệt, cần cài driver tương ứng (Chrome, Chromium…).
Nếu bạn đã quen với Docker, hoàn toàn có thể tự viết Dockerfile cho MediaCrawler để chạy self-hosted trên server hoặc VPS của mình, tuy repo hiện tại tập trung vào hướng dẫn native Python nhiều hơn.
Cài đặt bằng UV (Khuyến nghị)
Dự án ưu tiên uv như công cụ chuẩn cho việc quản lý môi trường Python và dependency vì uv giúp đồng bộ phiên bản nhanh, sát với cấu hình mà tác giả dùng để phát triển.
Quy trình cơ bản:
# Clone repo
git clone https://github.com/NanmiCoder/MediaCrawler
cd MediaCrawler
# Cài đặt uv (tuỳ theo hệ điều hành)
# Sau đó kiểm tra:
uv --version
# Đồng bộ dependency theo pyproject.toml
uv syncSau khi đồng bộ xong, bạn cần cài Playwright driver:
uv run playwright installToàn bộ command sau đó đều có thể chạy qua uv run, đảm bảo đúng môi trường mà uv quản lý.
Cài đặt bằng Python Venv (Phương án dự phòng)
Nếu bạn chưa quen uv, có thể dùng virtualenv/venv truyền thống:
cd MediaCrawler
# Tạo virtualenv
python -m venv venv
# macOS & Linux
source venv/bin/activate
# Windows
venv\Scripts\activate
# Cài dependency và Playwright
pip install -r requirements.txt
playwright installKhi dùng venv, các lệnh chạy crawler sẽ ở dạng python main.py ... thay vì uv run main.py ..., nhưng chức năng là tương đương.
Cấu hình cơ bản
Phần lớn hành vi của MediaCrawler được điều khiển thông qua file cấu hình trong thư mục config/, ví dụ config/base_config.py.
Tại đây, bạn có thể bật/tắt việc crawl comment, chọn mức độ chi tiết của dữ liệu, hoặc cấu hình proxy/IP pool nếu cần thu thập khối lượng lớn trong môi trường production.
Một số tuỳ chọn điển hình:
ENABLE_GET_COMMENTS: bật crawl comment cho bài viết hoặc video.- Các thông số về keyword list, danh sách ID bài viết, cấu hình database (SQLite/MySQL) và tuỳ chọn lưu CSV/JSON.
Chạy thử crawler cho Xiaohongshu
Ví dụ đơn giản, bạn muốn crawl nội dung Xiaohongshu theo keyword:
# Dùng uv (khuyến nghị)
uv run main.py --platform xhs --lt qrcode --type searchMột số tham số quan trọng:
--platform xhs: chọn nền tảng Xiaohongshu (xhs).--lt qrcode: sử dụng cách login bằng quét QR trên app chính thức, tận dụng trình duyệt thật để lưu session.--type search: dùng chế độ search theo keyword được cấu hình trong file config, thay vì crawl theo danh sách ID.
Nếu bạn muốn crawl danh sách bài viết cụ thể theo ID:
uv run main.py --platform xhs --lt qrcode --type detailToàn bộ kết quả thu thập sẽ được lưu theo cấu hình lưu trữ mà bạn đã chọn (CSV/JSON/DB) trong thư mục data/ hoặc database tương ứng.
Lưu trữ dữ liệu (CSV, JSON, database)
MediaCrawler hỗ trợ nhiều chế độ lưu dữ liệu, tiện cho cả nghiên cứu nhanh và triển khai hệ thống dài hạn:
- CSV: phù hợp khi bạn muốn mở dữ liệu trong Excel, pandas, hoặc các công cụ BI đơn giản; file được lưu trong thư mục
data/. - JSON: tiện cho việc feed trực tiếp vào các pipeline xử lý bằng Python/Node.js hoặc làm input cho LLM.
- SQLite: nhẹ, không cần server, rất phù hợp cho người dùng cá nhân hoặc workshop trên laptop.
- MySQL: phù hợp cho hệ thống production, nơi bạn cần lưu trữ lâu dài và truy vấn phức tạp qua SQL.
Ví dụ lưu vào SQLite:
uv run main.py --platform xhs --lt qrcode --type search --save_data_option sqliteHoặc lưu vào MySQL (sau khi khởi tạo database bằng --init_db mysql):
uv run main.py --platform xhs --lt qrcode --type search --save_data_option dbKết hợp MediaCrawler với AI Agent và LLM
Một trong những use case mạnh nhất của MediaCrawler là dùng nó như “data ingestion layer” cho hệ thống AI agent hoặc pipeline phân tích nội dung dựa trên LLM.
Bạn có thể để MediaCrawler thu thập bài viết, comment và profile creator, sau đó đẩy dữ liệu vào GPT, Claude hoặc bất cứ mô hình nào để phân tích sentiment, cluster chủ đề, gợi ý ý tưởng nội dung mới hoặc xây dựng recommendation system riêng.
Các bước điển hình:
- Dùng MediaCrawler crawl dữ liệu theo keyword hoặc danh sách creator, lưu kết quả vào JSON hoặc database SQLite/MySQL.
- Viết một script Python để đọc dữ liệu và chuẩn hóa thành prompt hoặc context cho LLM (ví dụ phân nhóm bài, tìm insight, trích xuất câu quote hay).
- Bọc workflow này vào một AI agent (LangChain, LlamaIndex, hay framework tự viết) để tự động hoá việc thu thập, phân tích và xuất báo cáo/idea nội dung một cách định kỳ.
Nhờ việc tách riêng lớp crawler và lớp phân tích AI, MediaCrawler giúp bạn tối ưu cả SEO lẫn Generative Engine Optimization (GEO): nội dung trên blog có thể kể lại quy trình, còn hệ thống AI phía sau tận dụng chính dữ liệu social mới nhất để sinh nội dung và insight phù hợp với người đọc.
Bài viết này cung cấp overview, cách cài đặt và một số workflow gợi ý; phần còn lại là tuỳ vào khả năng sáng tạo của bạn trong việc kết hợp MediaCrawler với AI/ML, hệ thống logging và hạ tầng self-hosted hiện có.








