V100 Master Scraper 是一款基於 Python 開發的高性能自動化網頁採集系統,專為處理 H&M 官網的大規模商品數據而設計。本工具整合了 undetected-chromedriver 反偵測技術、多執行緒併發下載以及動態 Session 管理機制,旨在解決電子商務網站常見的 Cloudflare 阻擋與動態加載難題。透過高度參數化的配置,本工具能確保數據抓取過程的穩定性、隱蔽性與斷點續傳能力。
系統遵循以下自動化作業流程,確保數據的完整性與系統的自癒性:
- 環境初始化 :讀取歷史數據
CSV,針對sku_id執行正規化處理(補足 10 位數),建立已處理清單以避免重複作業。 - 動態分頁遍歷 :遍歷
RAW_TASKS定義的 URL,模擬真人行為觸發pagination-hybrid-button載入更多,直至 DOM 結構完整。 - 變體挖掘 (Variant Discovery) :進入商品詳情頁後,遞迴解析所有顏色變體(Color Variants)之 URL 並加入優先處理隊列。
- 數據特徵提取 :利用
BeautifulSoup解析名稱、價格、庫存狀態(含尺碼詳細資訊)。 - 異步持久化 :
- 文本數據 :透過
pandas即時寫入 CSV 並強制執行flush()。 - 二進位數據 :利用
ThreadPoolExecutor進行圖片異步下載,優化 I/O 效率。
- 自癒機制 :若偵測到 HTTP 403 錯誤,系統將進入休眠模式並自動重啟瀏覽器執行個體,清理所有指紋足跡。
- 🛡️ 進階反偵測 :採用
undetected-chromedriver規避 Chrome 指紋偵測,有效繞過 Cloudflare 等待室。 - 💾 斷點續傳機制 :具備增量抓取功能,啟動時自動比對已完成項,節省系統資源。
- ⚡ 併發加速 (Concurrency) :
設
$N$ 為任務總數,$T_s$ 為單一商品抓取時間,$T_i$ 為圖片下載時間。傳統串列執行時間為$N(T_s + T_i)$ ;本工具透過多執行緒處理,理論執行時間優化為: $$ T_{total} \approx N \cdot T_s + \max(T_{i,1}, T_{i,2}, \dots, T_{i,n}) $$ - 🤖 自動化運維防禦 :
- 403 偵測 :遇 Access Denied 自動暫停 300 秒。
-
週期性重啟 :達到
RESTART_LIMIT(預設 35 件) 自動重啟 Session,防止內存溢漏。
| 組件 (Component) | 技術 / 庫 (Technology) | 用途 (Purpose) |
|---|---|---|
| 核心開發 | Python 3.8+ | 系統主體與邏輯控制 |
| 自動化控制 | undetected-chromedriver | 模擬瀏覽器行為與繞過指紋偵測 |
| DOM 解析 | BeautifulSoup (lxml) | 網頁結構化數據提取 |
| 數據處理 | pandas & csv | 數據持久化與進度管理 |
| 網路通訊 | requests | 圖片二進位串流下載 |
| 併發模型 | ThreadPoolExecutor | I/O 密集型任務加速 |
- Google Chrome 瀏覽器 (建議最新版本)。
- Python 3.8 或以上版本。
Bash
pip install requests pandas beautifulsoup4 lxml undetected-chromedriver
請在程式碼內的 CONFIG 字典中根據需求調整參數:
Python
CONFIG = {
"CSV_PATH": "hm_final_project_v100.csv", # 輸出數據檔案路徑
"IMAGE_DIR": "hm_project_images", # 圖片儲存目錄
"MAX_THREADS": 4, # 圖片下載併發線程數
"RESTART_LIMIT": 35, # 觸發重啟之商品門檻數
"CHROME_VERSION": 144 # 您的 Chrome 瀏覽器主版本
}
| 欄位名 | 類型 | 說明 |
|---|---|---|
sku_id |
String | 嚴格 10 位數商品識別碼 |
gender |
String | 商品性別分類 |
category |
String | 商品大類 (Tops / Bottoms) |
product_name |
String | 完整商品名稱 |
color |
String | 商品顏色特徵 |
sizes_in_stock |
Text | 庫存尺碼 (以 ` |
price |
Integer | 純數字格式價格 |
product_url |
String | 原始商品詳情頁連結 |
-
儲存路徑 :
./{IMAGE_DIR}/{sku_id}_{index}.jpg - 採集邏輯 :
- 若總圖數
$> 3$ :優先抓取 最後 3 張 (聚焦於平拍、細節與標籤)。 - 若總圖數
$\leq 3$ :抓取 前 2 張 ,確保模型訓練時的基本特徵一致性。
Caution
IP 封鎖風險 :H&M 設有嚴格的 Rate Limiting。若頻繁出現「Access Denied」,建議手動切換行動裝置熱點或開啟飛航模式以更換動態 IP。
Note
合規性聲明 :本腳本僅供學術研究與資料科學練習使用。執行時請務必遵守目標網站之 robots.txt 規範與相關法律條款。
- ** (Latest)** :
- 實作 SKU 自動補零邏輯,防止資料庫導入時的數據丟失。
- 整合
ThreadPoolExecutor提升 40% 以上的圖片下載速度。 - 新增 403 自動自癒休眠與 Session 重啟邏輯。
- Python Web Scraping with Selenium and undetected-chromedriver , documentation, 2024.
- Efficient Data Ingestion for Machine Learning , Data Engineering Quarterly.
- H&M Web API structure and frontend patterns analysis .