自然語言驅動的低程式碼爬蟲系統設計
摘要
本文介紹一個自然語言驅動的低程式碼爬蟲系統設計,旨在讓非技術背景的使用者透過簡單的自然語言輸入,快速定義並執行網頁爬蟲任務,無需手動編寫程式碼。該系統結合大型語言模型(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 服務,與前端儀表板及其他系統無縫整合。
三、使用者操作流程
系統設計直觀,使用者可在數分鐘內完成從需求輸入到結果檢視的流程,具體步驟如下:
需求輸入
使用者在對話介面或表單中輸入自然語言需求,例如:「從 example.com/product 抓取商品名稱、價格與庫存狀態。」AI 自動生成配置
大型語言模型解析輸入,生成 Scrapy/Playwright 的 JSON 配置檔案,包含目標 URL、CSS/XPath 選擇器、欄位定義與排程頻率。任務調度與執行
Celery 將任務加入執行佇列,Scrapy 工作節點結合 Playwright 進行爬取,處理靜態與動態內容。資料驗證與清洗
爬取完成後,基於 Transformer 的模型驗證與清洗資料(例如,確保「價格」為數字格式),並標記異常數據以供審核。結果儲存與通知
清洗後的資料儲存至 MySQL 與向量資料庫,系統透過儀表板通知使用者結果已可使用。後續管理
使用者可在儀表板檢視歷史任務、下載 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 錯誤處理
- 若選擇器在執行時失效,系統記錄錯誤並使用模型建議的替代選擇器重試。
- 若問題持續存在,系統提示使用者進一步 уточнить 需求。
五、快速部署步驟
系統採用容器化設計,方便部署與擴充。以下為部署步驟:
克隆程式碼倉庫
git clone git@repo/lowcode-crawler.git cd lowcode-crawler
設定環境變數
編輯.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
使用 Docker 啟動
docker-compose up -d --build
存取儀表板
開啟瀏覽器,前往http://localhost:3000
,登入後即可建立任務。測試內建範例
儀表板內建「新聞標題 + 連結」任務,無需額外設定即可測試。
六、範例程式碼
以下為 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 資料源。
八、結論
此自然語言驅動的低程式碼爬蟲系統讓網頁資料擷取變得簡單高效,任何非技術背景的使用者都能在數分鐘內完成任務設定與執行。透過整合大型語言模型、現代爬蟲框架與可擴充的基礎設施,系統實現了易用性與效能的平衡。未來將進一步優化使用者互動體驗並擴展資料源支援,使其成為企業資料擷取的強大工具。
沒有留言:
張貼留言