2025年8月31日 星期日

自然語言驅動的低程式碼爬蟲系統設計

 

自然語言驅動的低程式碼爬蟲系統設計

摘要

本文介紹一個自然語言驅動的低程式碼爬蟲系統設計,旨在讓非技術背景的使用者透過簡單的自然語言輸入,快速定義並執行網頁爬蟲任務,無需手動編寫程式碼。該系統結合大型語言模型(LLM)、現代爬蟲框架與直觀的使用者介面,實現從需求輸入到資料擷取的自動化流程。系統架構包含人工智慧配置、穩健的任務調度以及可擴充的基礎設施,兼顧易用性與企業級可靠性。

一、系統概覽

本系統採取「自然語言 → 配置 → 執行」三步驟流程,讓非工程師使用者僅需透過對話介面或表單輸入需求,即可自動生成爬蟲任務、執行並擷取目標網站內容,全程無需編寫程式碼。系統完成爬取後,將資料處理為結構化格式,並透過使用者友好的儀表板或 API 提供存取。

系統流程圖


二、核心組件與技術選型

系統採用模組化設計,各組件注重可擴充性、維護性與易用性。以下為各模組的技術選型與功能說明:

模組 技術選型 功能描述
使用者介面 Vue3 + Vite + Pinia / React 提供對話式或引導式表單介面,支援自然語言輸入爬取目標與欄位需求。
AI 配置器 OpenAI GPT-4 / 本地 LLM(如 LLaMA) 將自然語言需求轉為爬蟲任務配置(URL、CSS/XPath 選擇器、欄位、排程)。
爬蟲引擎 Scrapy + Playwright 支援靜態與動態網頁爬取,具備高效並行處理能力。
任務調度與併發 Celery + Redis / Prefect 管理任務佇列、錯誤重試與併發控制。
資料清洗與抽取 Python + Transformers 結合正則表達式與 NLP 模型進行資料清洗、欄位抽取與自動摘要。
資料儲存 MySQL(結構化) + Qdrant/Milvus(向量) 支援結構化表格儲存、全文檢索與相似度比對。
API 服務 FastAPI 提供 RESTful API,支援查詢、CSV 下載與動態報表生成。
內部儀表板 Vue3 + ECharts / Ant Design Vue 提供關鍵字搜尋、結果預覽與任務管理功能。
基礎設施 Docker Compose / Kubernetes + Helm 支援一鍵部署、水平擴充與基礎設施即程式碼(IaC)。

關鍵設計選擇

  • Scrapy + Playwright:Scrapy 提供高效能爬蟲框架,Playwright 處理 JavaScript 渲染的動態頁面。
  • Celery/Prefect:確保任務調度的可靠性與錯誤重試機制。
  • MySQL + 向量資料庫:結合結構化儲存與向量資料庫,支援表格資料與進階搜尋。
  • FastAPI:提供高效能、非同步的 API 服務,與前端儀表板及其他系統無縫整合。

三、使用者操作流程

系統設計直觀,使用者可在數分鐘內完成從需求輸入到結果檢視的流程,具體步驟如下:

  1. 需求輸入
    使用者在對話介面或表單中輸入自然語言需求,例如:「從 example.com/product 抓取商品名稱、價格與庫存狀態。」

  2. AI 自動生成配置
    大型語言模型解析輸入,生成 Scrapy/Playwright 的 JSON 配置檔案,包含目標 URL、CSS/XPath 選擇器、欄位定義與排程頻率。

  3. 任務調度與執行
    Celery 將任務加入執行佇列,Scrapy 工作節點結合 Playwright 進行爬取,處理靜態與動態內容。

  4. 資料驗證與清洗
    爬取完成後,基於 Transformer 的模型驗證與清洗資料(例如,確保「價格」為數字格式),並標記異常數據以供審核。

  5. 結果儲存與通知
    清洗後的資料儲存至 MySQL 與向量資料庫,系統透過儀表板通知使用者結果已可使用。

  6. 後續管理
    使用者可在儀表板檢視歷史任務、下載 CSV 檔案、修改排程或重新執行爬取。

四、AI 配置器實作要點

AI 配置器是系統的核心,負責將自然語言轉為可執行的爬蟲配置。以下為實作細節:

4.1 Prompt 設計

大型語言模型根據以下提示生成結構化配置:

使用者輸入:從 https://example.com/product 擷取商品名稱、價格與庫存狀態。
任務:生成符合 Scrapy 格式的 JSON 配置檔案,包含起始 URL、CSS/XPath 選擇器與排程。

4.2 JSON 配置範本

模型輸出的 JSON 配置範例如下:

{
  "start_urls": ["https://example.com/product"],
  "selectors": {
    "title": {"css": ".product-title", "type": "text"},
    "price": {"css": ".price", "type": "number"},
    "stock": {"css": ".stock-status", "type": "text"}
  },
  "schedule": "0 */4 * * *" // 每 4 小時執行一次
}

4.3 輸出驗證

  • 系統驗證 JSON 配置的 Schema 格式,並對 CSS/XPath 選擇器進行樣本頁面測試。
  • 若配置無效,系統會透過對話介面要求使用者澄清需求。

4.4 錯誤處理

  • 若選擇器在執行時失效,系統記錄錯誤並使用模型建議的替代選擇器重試。
  • 若問題持續存在,系統提示使用者進一步 уточнить 需求。

五、快速部署步驟

系統採用容器化設計,方便部署與擴充。以下為部署步驟:

  1. 克隆程式碼倉庫

    git clone git@repo/lowcode-crawler.git
    cd lowcode-crawler
    
  2. 設定環境變數
    編輯 .env 檔案,填入以下內容:

    • OpenAI API 金鑰或本地 LLM 端點
    • MySQL 與 Redis 連線字串
    • 向量資料庫(Qdrant/Milvus)憑證

    範例 .env

    OPENAI_API_KEY=sk-xxx
    MYSQL_URL=mysql://user:password@localhost:3306/crawler_db
    REDIS_URL=redis://localhost:6379/0
    QDRANT_URL=http://localhost:6333
    
  3. 使用 Docker 啟動

    docker-compose up -d --build
    
  4. 存取儀表板
    開啟瀏覽器,前往 http://localhost:3000,登入後即可建立任務。

  5. 測試內建範例
    儀表板內建「新聞標題 + 連結」任務,無需額外設定即可測試。

六、範例程式碼

以下為 AI 配置器生成的一個簡化 Scrapy 爬蟲範例:

import scrapy
from scrapy_playwright.page import PageMethod

class ProductSpider(scrapy.Spider):
    name = "product_spider"
    start_urls = ["https://example.com/product"]

    def start_requests(self):
        for url in self.start_urls:
            yield scrapy.Request(
                url,
                meta={"playwright": True, "playwright_page_methods": [
                    PageMethod("wait_for_selector", ".product-title")
                ]}
            )

    def parse(self, response):
        yield {
            "title": response.css(".product-title::text").get(),
            "price": response.css(".price::text").get(),
            "stock": response.css(".stock-status::text").get()
        }

此爬蟲使用 Playwright 處理動態內容,擷取指定欄位並儲存至資料庫。

七、未來優化方向

為進一步提升系統功能,可考慮以下改進:

  • 可視化 XPath 建構器:提供拖拉式介面,讓使用者選擇網頁元素,自動生成 CSS/XPath 選擇器。
  • 多輪對話校正:AI 主動詢問細節,減少需求歧義造成的錯誤。
  • 動態驗證:爬取後將樣本資料展示於對話介面,供使用者一鍵確認或重新爬取。
  • 權限分級:限制不同部門僅能存取其相關任務與資料。
  • 支援 API 與 GraphQL:擴展系統以支援公開 API 與 GraphQL 資料源。

八、結論

此自然語言驅動的低程式碼爬蟲系統讓網頁資料擷取變得簡單高效,任何非技術背景的使用者都能在數分鐘內完成任務設定與執行。透過整合大型語言模型、現代爬蟲框架與可擴充的基礎設施,系統實現了易用性與效能的平衡。未來將進一步優化使用者互動體驗並擴展資料源支援,使其成為企業資料擷取的強大工具。

沒有留言:

張貼留言

熱門文章