Quay lại danh sách
Tin tức công nghệ

Hướng Dẫn Tự Dựng Private AI Web Scraper Đa Tầng Bằng Scrapy, Ollama Và Qwen2.5-Coder Trên VPS 8GB RAM

3 tháng 6, 2026

Giới thiệu xu hướng AI Web Scraping năm 2026

Trong kỷ nguyên bùng nổ của dữ liệu và trí tuệ nhân tạo, việc thu thập thông tin từ internet đã dịch chuyển từ các phương pháp truyền thống dựa trên Selector (XPath, CSS) sang hệ thống AI Web Scraping. Điểm yếu cố hữu của kỹ thuật cào web cũ là tính giòn gãy (fragile): chỉ cần cấu trúc HTML của trang mục tiêu thay đổi nhỏ, mã nguồn crawler sẽ dừng hoạt động ngay lập tức.

Bằng cách kết hợp sức mạnh phân tích ngữ nghĩa của Mô hình ngôn ngữ lớn (LLM), chúng ta có thể tạo ra các scraper có khả năng tự thích ứng, trích xuất dữ liệu không cấu trúc thành JSON một cách chuẩn xác. Bài viết này sẽ hướng dẫn bạn từng bước xây dựng một hệ thống Private AI Web Scraper đa tầng sử dụng framework Scrapy kết hợp với Ollama để vận hành LLM Qwen2.5-Coder cục bộ một cách mượt mà chỉ trên một VPS cấu hình khiêm tốn: 8GB RAM, không cần GPU đắt đỏ.


Tại sao lại chọn bộ ba Scrapy, Ollama và Qwen2.5-Coder?

Việc tự vận hành (Self-hosted) một hệ thống AI thu thập dữ liệu mang lại lợi ích kép về cả chi phí lẫn bảo mật thông tin (Private AI). Dưới đây là lý do cấu trúc này là sự lựa chọn tối ưu nhất hiện nay:

  • Scrapy (Tầng Thu Thập): Framework cào dữ liệu top 1 của Python với kiến trúc phi đồng bộ (Asynchronous) dựa trên Twisted, mang lại hiệu năng xử lý hàng ngàn request cùng lúc cực kỳ nhẹ nhàng, tiết kiệm tài nguyên hệ thống hơn hẳn Selenium hay Playwright.
  • Ollama (Tầng Suy Luận Local): Công cụ quản lý và thực thi LLM gọn nhẹ, tối ưu hóa bộ nhớ và CPU, cho phép chạy các mô hình lượng tử hóa (Quantized) trực tiếp trên môi trường Linux mà không cần cài đặt driver phức tạp.
  • Qwen2.5-Coder (Bộ Não AI): Dòng mô hình chuyên dụng cho lập trình và xử lý cấu trúc dữ liệu của Alibaba. Phiên bản Qwen2.5-Coder:3B hoặc 7B (Q4_K_M) sở hữu khả năng hiểu cấu trúc HTML, xử lý tiếng Việt xuất sắc và định dạng đầu ra chuẩn JSON, cực kỳ khớp với mức cấu hình VPS 8GB RAM.

Kiến trúc hệ thống Scraper đa tầng (Multi-tier)

Để tối ưu hóa tài nguyên trên VPS 8GB RAM, hệ thống được thiết kế theo kiến trúc phân tầng xử lý tách biệt:

  1. Tầng 1 (Crawl & Filter): Scrapy gửi request phi đồng bộ, tải trang, lọc bỏ các thẻ rác không cần thiết (script, style, nav, footer) để giảm dung lượng context window cho LLM.
  2. Tầng 2 (Queue & Buffer): Dữ liệu thô sau khi tinh lọc được đóng gói và đưa vào hàng đợi xử lý tuần tự, tránh hiện tượng nghẽn mạch (bottleneck) khi gọi API cục bộ của Ollama.
  3. Tầng 3 (LLM Extraction): Ollama tiếp nhận văn bản sạch, Qwen2.5-Coder thực hiện bóc tách thực thể (Entity Extraction) theo JSON Schema định sẵn và trả về kết quả cuối cùng.

Hướng dẫn triển khai chi tiết trên VPS 8GB RAM

Bước 1: Chuẩn bị môi trường VPS Ubuntu

Trước tiên, hãy cập nhật hệ thống và cài đặt các thư viện cơ bản cần thiết cho Python:

sudo apt update && sudo apt upgrade -y
sudo apt install python3-pip python3-venv build-essential libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev -y

Bước 2: Cài đặt và cấu hình Ollama với Qwen2.5-Coder

Cài đặt Ollama phiên bản mới nhất chỉ với một dòng lệnh đơn giản:

curl -fsSL https://ollama.com/install.sh | sh

Trên VPS 8GB RAM, để hệ thống hoạt động ổn định và giữ lại khoảng 2-3GB RAM cho hệ điều hành cùng tiến trình Scrapy, chúng ta có hai sự lựa chọn:

  • Qwen2.5-Coder:3B (Khuyến nghị): Chiếm khoảng ~2.2GB RAM, tốc độ phản hồi cực nhanh (15-20 tokens/s), phù hợp cào số lượng lớn trang web liên tục.
  • Qwen2.5-Coder:7B (Bản lượng tử Q4_K_M): Chiếm khoảng ~4.7GB RAM, thông minh hơn, xử lý cấu trúc phức tạp tốt hơn nhưng tốc độ chậm hơn trên CPU.

Tiến hành tải mô hình bằng lệnh:

ollama pull qwen2.5-coder:3b

Để kiểm tra mô hình đã hoạt động chính xác chưa, bạn có thể chạy thử lệnh curl test API cục bộ:

curl http://localhost:11434/api/generate -d '{
  "model": "qwen2.5-coder:3b",
  "prompt": "Trích xuất tên sản phẩm và giá từ đoạn văn sau: Máy tính Dell giá 15 triệu.",
  "stream": false
}'

Bước 3: Khởi tạo Project Scrapy và viết mã nguồn Pipeline tích hợp AI

Tạo một môi trường ảo Python độc lập và cài đặt các thư viện scrapy cùng thư viện HTTP client requests:

python3 -m venv ai_scraper_env
source ai_scraper_env/bin/activate
pip install scrapy requests beautifulsoup4

Khởi tạo project Scrapy mới:

scrapy startproject private_ai_scraper
cd private_ai_scraper

Bây giờ, chúng ta sẽ viết một Item Pipeline trong file pipelines.py để gửi nội dung HTML đã làm sạch sang cho Ollama xử lý ngữ nghĩa:

import scrapy
import requests
from bs4 import BeautifulSoup
import json

class AIParserPipeline:
    def open_spider(self, spider):
        self.ollama_url = "http://localhost:11434/api/generate"
        self.model_name = "qwen2.5-coder:3b"

    def process_item(self, item, spider):
        # Bước 1: Làm sạch HTML thô bằng BeautifulSoup
        soup = BeautifulSoup(item['raw_html'], 'html.parser')
        for element in soup(["script", "style", "nav", "footer", "header"]):
            element.decompose()
        
        clean_text = " ".join(soup.get_text().split())
        
        # Giới hạn độ dài text phù hợp context window để tránh tràn RAM
        clean_text = clean_text[:6000]

        # Bước 2: Thiết kế System Prompt tối ưu cho Qwen2.5-Coder
        system_prompt = (
            "Bạn là một chuyên gia trích xuất dữ liệu. Hãy phân tích đoạn văn bản HTML sạch sau "
            "và trích xuất thông tin theo định dạng JSON chuẩn. Không giải thích, không thêm text thừa.\n"
            "Schema yêu cầu: {\"title\": \"tên bài viết\", \"author\": \"tên tác giả\", \"date\": \"ngày đăng\"}"
        )

        # Bước 3: Gửi request đến Ollama API
        payload = {
            "model": self.model_name,
            "prompt": f"{system_prompt}\n\nVăn bản: {clean_text}",
            "stream": False,
            "options": {
                "temperature": 0.0,  # Đặt bằng 0 để kết quả trích xuất nhất quán, chính xác
                "num_ctx": 8192      # Giới hạn context window tối ưu năng suất VPS
            }
        }

        try:
            response = requests.post(self.ollama_url, json=payload, timeout=30)
            result = response.json()
            ai_response = result.get('response', '{}').strip()
            
            # Ép kiểu phản hồi về dạng dict JSON để lưu trữ
            item['extracted_data'] = json.loads(ai_response)
        except Exception as e:
            spider.logger.error(f"AI Extraction Failed: {str(e)}")
            item['extracted_data'] = None
            
        return item

Kinh nghiệm cấu hình tối ưu hiệu năng và tránh tràn RAM

Vận hành LLM trên môi trường VPS không có GPU (chỉ dùng CPU và RAM) đòi hỏi sự tính toán chi tiết về mặt tài nguyên hệ thống. Dưới đây là những tinh chỉnh quan trọng bạn bắt buộc phải thực hiện để tránh máy chủ bị treo (OOM - Out of Memory):

1. Giới hạn tính đồng thời của Scrapy: Mặc dù Scrapy có thể chạy hàng trăm request cùng lúc, việc đẩy liên tục dữ liệu vào Ollama sẽ làm CPU tăng vọt lên 100%. Hãy cấu hình trong file settings.xml thông số CONCURRENT_REQUESTS = 2 và bật tính năng DOWNLOAD_DELAY = 1 để làm mượt hàng đợi suy luận.

2. Bật Flash Attention trong Ollama: Nếu phiên bản Ollama của bạn hỗ trợ, hãy cấu hình biến môi trường OLLAMA_FLASH_ATTENTION=1 trước khi khởi động service nhằm tiết kiệm tối đa dung lượng bộ nhớ khi xử lý các context window lớn.

3. Kích hoạt SWAP cho VPS: Luôn tạo thêm phân vùng RAM ảo (SWAP) khoảng 4GB đến 8GB trên VPS của bạn để làm bệ đỡ an toàn, đề phòng trường hợp các trang web có lượng dữ liệu đột biến gây quá tải RAM vật lý.


Kết luận

Xây dựng một hệ thống Private AI Web Scraper đa tầng không chỉ giúp bạn làm chủ hoàn toàn nguồn dữ liệu mà còn giải quyết triệt để bài toán chi phí vận hành hàng tháng. Sự bổ trợ nhịp nhàng từ tốc độ thu thập vượt trội của Scrapy kết hợp với trí tuệ linh hoạt của Qwen2.5-Coder vận hành qua Ollama đã chứng minh rằng: Bạn hoàn toàn có thể sở hữu một hạ tầng AI cào dữ liệu thông minh, bảo mật cao và tự động hóa tuyệt đối ngay trên phần cứng VPS phổ thông 8GB RAM.

Hãy bắt tay vào cài đặt, thử nghiệm với các Schema dữ liệu của riêng bạn và đón đầu xu hướng thu thập thông tin thông minh của tương lai!

Hướng Dẫn Tự Dựng Private AI Web Scraper Đa Tầng Bằng Scrapy, Ollama Và Qwen2.5-Coder Trên VPS 8GB RAM | DPTCloud