Dựa trên video hướng dẫn của Automation Expert
Bạn đang gặp khó khăn với việc thu thập dữ liệu một cách thủ công? Việc copy-paste từng thông tin riêng lẻ thật sự tốn thời gian và công sức, phải không nào?
Hôm nay, mình sẽ giới thiệu với bạn một công cụ tuyệt vời giúp tự động hóa quá trình này – đó chính là Crawl For AI. Thư viện này không chỉ miễn phí mà còn cực kỳ mạnh mẽ, giúp bạn thu thập dữ liệu từ nhiều nguồn khác nhau một cách hiệu quả nhé!
Nội Dung Chính
Chuẩn Bị Môi Trường
Trước khi bắt đầu crawl data, mình cần chuẩn bị môi trường phát triển. Tất cả các ví dụ trong bài này đều được mình đăng tải trên GitHub để bạn có thể dễ dàng tải về và thử nghiệm nhé.
Điểm Chính:
- Tải repository từ GitHub chứa các ví dụ
- Cài đặt thư viện UV để quản lý Python
- Tạo môi trường ảo (Virtual Environment)
- Cài đặt các thư viện yêu cầu từ file requirements
- Cài đặt trình duyệt phục vụ cho việc crawl
# Tạo môi trường ảo với UV
uv venv
# Cài đặt các thư viện từ requirements
uv pip install -r requirements.txt
# Cài đặt browser cho Crawl For AI
playwright install
Ý Kiến Của Mình:
Việc sử dụng môi trường ảo là cực kỳ quan trọng khi làm việc với Python, giúp tránh xung đột giữa các phiên bản thư viện. UV là một lựa chọn hiện đại thay thế cho virtualenv và pip truyền thống, giúp quản lý dependencies nhanh hơn nhiều đấy!
Crawl Data Từ URL Đơn Giản
Ở ví dụ đầu tiên, mình sẽ thực hiện crawl data từ một URL đơn giản. Cụ thể là trang n8n workflow với category AI – một trang web hiển thị danh sách các workflow tự động hóa.
Điểm Chính:
- Sử dụng script đơn giản để crawl dữ liệu từ URL
- Thực hiện crawl chỉ mất khoảng 1-2 giây
- Kết quả trả về là file JSON chứa 471 workflow automation
- Data crawl được lưu trong thư mục output
# Ví dụ 1: Simple Crawling
python 1_simple_crawl.py
Ý Kiến Của Mình:
Điều ấn tượng nhất ở đây là tốc độ crawl – chỉ khoảng 1.68 giây để lấy được dữ liệu của 471 workflow. Crawl For AI đã được tối ưu rất tốt, giúp việc thu thập dữ liệu trở nên cực kỳ nhanh chóng so với các thư viện khác mình từng sử dụng.
Extract Data Có Cấu Trúc Với Language Model
Sau khi đã crawl được dữ liệu thô, mình cần chuyển đổi nó thành dạng có cấu trúc để dễ sử dụng hơn. Ở ví dụ này, mình sẽ kết hợp Language Model (OpenAI) để trích xuất dữ liệu theo format mình mong muốn.
Điểm Chính:
- Sử dụng OpenAI API để xử lý dữ liệu thô
- Tạo prompt hướng dẫn model extract thông tin cụ thể
- Định nghĩa schema mẫu cho output (title, description, URL, author, tags…)
- Nhận về dữ liệu đã được cấu trúc hóa theo yêu cầu
# Ví dụ 2: Structured Output với LLM
# Đoạn prompt
prompt = """
Tôi đang crawl data từ trang n8n workflow.
Hãy extract các thông tin sau từ dữ liệu thô:
- Title của workflow
- Description
- Author
- URL trực tiếp
- Tags
"""
# Schema mẫu
schema = {
"title": "string",
"description": "string",
"url": "string",
"author": "string",
"tags": ["string"]
}
python 2_structured_output.py
Ý Kiến Của Mình:
Đây chính là điểm mạnh của Crawl For AI so với các thư viện crawl khác – khả năng tích hợp LLM để xử lý dữ liệu. Việc này giúp mình có thể linh hoạt định nghĩa cấu trúc output theo ý muốn mà không cần viết nhiều code phức tạp để parse HTML như trước đây. Super convenient!
Crawl Nhiều URL Cùng Lúc
Ở ví dụ thứ ba, mình sẽ thực hiện crawl nhiều URL cùng một lúc. Điều này cực kỳ hữu ích khi bạn muốn crawl chi tiết từng trang con sau khi đã có danh sách URLs từ trang chính.
Điểm Chính:
- Sử dụng kết quả crawl từ ví dụ đầu tiên làm input
- Trích xuất tất cả URL từ dữ liệu crawl được
- Thiết lập giới hạn số lượng request đồng thời (concurrency)
- Thiết lập rate limit để không gửi request quá nhanh
- Tôn trọng robots.txt của trang web
# Ví dụ 3: Multi URL Crawling
# Trích xuất URLs từ file JSON đã crawl
with open('output/data.json', 'r') as f:
data = json.load(f)
urls = [item['url'] for item in data]
# Thiết lập tham số
concurrency = 5 # Số lượng request đồng thời
respect_robots_txt = True # Tôn trọng robots.txt
rate_limit = 2 # Số giây giữa các request
python 3_multi_url_crawl.py
Ý Kiến Của Mình:
Cách thiết lập concurrency và rate limit là cực kỳ quan trọng khi crawl nhiều trang cùng lúc. Nó không chỉ giúp việc crawl nhanh hơn mà còn tránh việc bị block bởi server. Mình đặc biệt thích tùy chọn respect_robots_txt – giúp việc crawl trở nên ethical và tuân thủ quy định của trang web!
Crawl Trang Web Yêu Cầu Đăng Nhập
Ở ví dụ thứ tư, mình sẽ thực hiện crawl dữ liệu từ những trang yêu cầu đăng nhập. Đây là tính năng cực kỳ hữu ích khi bạn muốn tự động hóa việc thu thập dữ liệu từ các trang không public.
Điểm Chính:
- Tạo profile và lưu thông tin đăng nhập
- Sử dụng headless browser để tự động đăng nhập
- Thực hiện crawl data từ trang đã đăng nhập
- Lưu và tái sử dụng profile cho những lần crawl sau
# Ví dụ 4: Crawl trang yêu cầu đăng nhập
# Chạy với tùy chọn headful để xem quá trình
python 4_profile_crawl.py --headful
# Chạy với profile đã lưu
python 4_profile_crawl.py --profile=my_profile
Ý Kiến Của Mình:
Tính năng sử dụng profile thực sự là game-changer! Trước đây mình phải viết rất nhiều code phức tạp với Selenium để tự động đăng nhập và xử lý các form, nhưng với Crawl For AI, mọi thứ trở nên đơn giản hơn rất nhiều. Bạn chỉ cần đăng nhập một lần, lưu profile và sử dụng lại cho những lần sau – quá tiện lợi phải không nào?
Sử Dụng Crawl For AI Với n8n
Phần bonus cuối cùng là cách tích hợp Crawl For AI vào n8n – một nền tảng automation workflow mà nhiều người đang sử dụng. Việc này giúp bạn có thể tự động hóa toàn bộ quy trình thu thập và xử lý dữ liệu.
Điểm Chính:
- Sử dụng node “Execute Command” trong n8n
- Thực thi lệnh crawl trực tiếp từ máy host của n8n
- Kích hoạt môi trường ảo trước khi chạy script
- Tích hợp kết quả crawl vào workflow tự động
# Lệnh thực thi trong node Execute Command của n8n
cd /path/to/scripts
source venv/bin/activate
python 1_simple_crawl.py
Ý Kiến Của Mình:
Đây là phần mình thấy hữu ích nhất cho những ai đang sử dụng n8n! Bằng cách kết hợp Crawl For AI với n8n, bạn có thể xây dựng một pipeline hoàn chỉnh: từ việc thu thập dữ liệu, xử lý, đến lưu trữ và thông báo. Hãy thử nghĩ xem – bạn có thể tự động crawl giá sản phẩm mỗi ngày, so sánh với giá cũ và gửi thông báo khi có khuyến mãi. Khả năng ứng dụng là vô tận!