Add advanced crawler module design to SDD v1.3
新增第 4.1.5 節:進階爬蟲模組設計 主要內容: - Scrapy 框架整合規格(擴充新聞來源用) - 通用爬蟲架構設計原則 - 多層級選擇器備用機制 - Pipeline 資料處理管線(CSV + Database) - 資料庫表結構(articles, tags, article_tags) - 錯誤處理與效能最佳化 - 執行測試與除錯技巧 - 新增新聞來源的標準步驟 技術規格: - Scrapy >= 2.11.0 - PyMySQL >= 1.1.0 - python-dateutil >= 2.8.2 - 支援多來源整合(source 欄位) - Context Manager 確保交易完整性 - 標籤快取機制提升效能 這個設計可作為擴充其他新聞來源的通用範本。 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -74,6 +74,120 @@ Digitimes 帳號密碼登入(付費訂閱) 全文擷取
|
||||
3. 重試失敗後通知系統管理員
|
||||
4. 專員可透過介面手動觸發重新抓取
|
||||
|
||||
4.1.5 進階爬蟲模組設計(擴充新聞來源用)
|
||||
|
||||
本節說明如何擴充新的新聞來源,以 Scrapy 框架實作進階爬蟲模組。
|
||||
|
||||
技術堆疊(Scrapy 方案)
|
||||
• 爬蟲框架:Scrapy >= 2.11.0
|
||||
• Item 適配器:itemadapter >= 0.7.0
|
||||
• 資料庫連接:PyMySQL >= 1.1.0
|
||||
• 日期解析:python-dateutil >= 2.8.2
|
||||
• 環境變數:python-dotenv >= 1.0.0
|
||||
|
||||
爬蟲核心設計原則
|
||||
• Spider:定義爬蟲名稱、允許網域、起始 URL
|
||||
• 測試模式:支援參數控制(不追蹤分頁、指定單一 URL)
|
||||
• 多層級選擇器:優先 > 備用 > 最後手段,提升容錯性
|
||||
• 連結過濾:跳過 JavaScript、錨點、非目標頁面
|
||||
|
||||
列表頁解析策略
|
||||
• 多層級選擇器備用機制
|
||||
• 連結提取優先順序設計
|
||||
• 連結過濾規則(JavaScript、錨點、非文章頁)
|
||||
• 智慧型分頁處理
|
||||
|
||||
文章頁解析邏輯
|
||||
• 標題提取:多層選擇器備用
|
||||
• 作者提取:CSS 選擇器 > meta 標籤
|
||||
• 發布日期:CSS 選擇器 > meta 標籤
|
||||
• 摘要提取:CSS 選擇器 > meta description
|
||||
• 分類提取:CSS 選擇器或從 URL 推斷
|
||||
• 標籤提取:多種選擇器支援
|
||||
• 付費文章檢測:檢查付費牆標記(.paywall, .premium 等)
|
||||
• 內容提取:僅非付費文章,多層選擇器備用
|
||||
|
||||
通用資料模型(ArticleItem)
|
||||
• title:文章標題(必填,最大 500 字元)
|
||||
• url:文章完整 URL(必填,唯一識別)
|
||||
• author:作者名稱
|
||||
• publish_date:發布日期
|
||||
• summary:文章摘要
|
||||
• is_paywalled:是否為付費文章(0/1)
|
||||
• category:文章分類
|
||||
• tags:標籤列表
|
||||
• content:文章內容(僅免費文章)
|
||||
• source:新聞來源(用於多來源整合)
|
||||
|
||||
Pipeline 資料處理管線
|
||||
1. CsvExportPipeline(優先級 300)
|
||||
- 本地備份:CSV 檔案儲存
|
||||
- 編碼格式:UTF-8
|
||||
- 即使資料庫失敗仍可保存資料
|
||||
|
||||
2. DatabasePipeline(優先級 400)
|
||||
- 資料表:articles, tags, article_tags
|
||||
- Context Manager:確保交易完整性
|
||||
- 標籤快取機制:減少資料庫查詢
|
||||
- 日期解析:支援多種格式
|
||||
- 去重機制:URL 唯一性檢查
|
||||
- 更新邏輯:已存在則更新,不存在則新增
|
||||
|
||||
錯誤處理機制
|
||||
• 選擇器失敗:多層備用選擇器,逐層嘗試
|
||||
• 資料庫錯誤:捕獲例外,記錄日誌,繼續處理
|
||||
• 連線失敗:警告但不中斷爬蟲執行
|
||||
• 日誌記錄:使用 Python logging 模組
|
||||
|
||||
Settings 爬蟲設定
|
||||
• ROBOTSTXT_OBEY:True(遵守 robots.txt)
|
||||
• DOWNLOAD_DELAY:1-3 秒(請求間隔,依網站調整)
|
||||
• FEED_EXPORT_ENCODING:utf-8
|
||||
• Twisted Reactor:AsyncioSelectorReactor
|
||||
|
||||
執行與測試
|
||||
• 基本執行:scrapy crawl <spider_name>
|
||||
• 測試模式:scrapy crawl <spider_name> -a test_mode=true
|
||||
• 指定 URL:scrapy crawl <spider_name> -a start_url="https://..."
|
||||
• 輸出檔案:scrapy crawl <spider_name> -o output.json
|
||||
• 除錯模式:scrapy crawl <spider_name> --loglevel=DEBUG
|
||||
• Shell 測試:scrapy shell "https://..."
|
||||
|
||||
除錯技巧
|
||||
• scrapy shell:測試選擇器
|
||||
• Chrome DevTools:分析網頁結構
|
||||
• robots.txt 檢查:確認爬取規則
|
||||
• 日誌分析:追蹤錯誤原因
|
||||
|
||||
效能最佳化建議
|
||||
• 標籤快取:啟動時載入所有標籤到記憶體
|
||||
• HTTP 快取:減少重複請求(選用)
|
||||
• AutoThrottle:自動調整請求速率(選用)
|
||||
• Context Manager:確保資料庫連線正確關閉
|
||||
• 並發控制:CONCURRENT_REQUESTS 設定
|
||||
|
||||
資料庫表結構
|
||||
articles 表:
|
||||
- id, title, url (UNIQUE), author, publish_date, summary
|
||||
- is_paywalled, category, content, source
|
||||
- crawled_at, created_at, updated_at
|
||||
|
||||
tags 表:
|
||||
- id, name (UNIQUE), created_at
|
||||
|
||||
article_tags 關聯表:
|
||||
- id, article_id (FK), tag_id (FK)
|
||||
- UNIQUE(article_id, tag_id)
|
||||
|
||||
新增新聞來源步驟
|
||||
1. 建立新的 Spider(繼承 scrapy.Spider)
|
||||
2. 定義 start_urls 與 allowed_domains
|
||||
3. 實作 parse() 解析列表頁
|
||||
4. 實作 parse_article() 解析文章頁
|
||||
5. 測試選擇器與資料提取
|
||||
6. 調整 DOWNLOAD_DELAY 避免被封鎖
|
||||
7. 加入 Pipeline 進行資料儲存
|
||||
|
||||
4.2 關鍵字群組管理
|
||||
4.2.1 群組分類方式
|
||||
• 依產業別分群:半導體、面板、車用電子...等
|
||||
@@ -412,17 +526,27 @@ Ollama 開源的本地 LLM 執行框架,可在企業內部部署運行
|
||||
• 套件版本更新
|
||||
- lxml 升級至 6.0+(Python 3.13 相容)
|
||||
- WeasyPrint 升級至 67.0+
|
||||
- httpx + BeautifulSoup4 取代 Scrapy
|
||||
- httpx + BeautifulSoup4 取代 Scrapy(基礎爬蟲)
|
||||
- aiosmtplib 升級至 5.0+
|
||||
- python-jose 升級至 3.5+
|
||||
- bcrypt 升級至 5.0+
|
||||
- ldap3 2.9+
|
||||
|
||||
• 新增進階爬蟲模組設計(4.1.5 節)
|
||||
- Scrapy 框架整合規格
|
||||
- 通用爬蟲架構設計(擴充新聞來源用)
|
||||
- Pipeline 資料處理管線
|
||||
- 多層級選擇器備用機制
|
||||
- 資料庫表結構設計
|
||||
- 錯誤處理與效能最佳化
|
||||
- 新增新聞來源步驟說明
|
||||
|
||||
• 功能優化
|
||||
- 新增 asyncio 並發控制
|
||||
- 使用 tenacity 實作錯誤重試機制
|
||||
- 改善安全性需求描述
|
||||
- 優化 PDF 中文字型支援
|
||||
- 新增 source 欄位支援多來源整合
|
||||
|
||||
版本 1.2 (2025-01-27)
|
||||
• 初始版本規格定義
|
||||
|
||||
Reference in New Issue
Block a user