| 維度 | 關鍵配置 | 建議值/策略 |
|---|---|---|
| 併發度 | fetcher.threads.fetch |
50-200 (視 CPU/帶寬/目標站點承受力) |
| 每域名併發 | fetcher.server.delay / fetcher.max.crawl.delay |
1-2s 延遲,避免觸發反爬 |
| 連接池 | http.max.connections, http.max.connections.per.host |
500 / 50 |
| 超時 | http.timeout, http.socket.timeout |
10s / 5s |
| 重試 | fetcher.max.retries |
2-3 次,指數退避 |
| DNS 緩存 | network.dns.cache.ttl |
300s (5 分鐘) |
| User-Agent 池 | http.agent.name + 自定義輪換 |
準備 20+ 常見 UA 隨機輪換 |
| 代理 IP 池 | 需自研/購買代理中間件 | Nutch 可通過 http.proxy.host/port 動態設置,建議寫插件 |
# 啟動 4 個獨立 Nutch 進程,分片種子 URL
# 進程 1
bin/nutch inject crawl/crawldb urls/part1
bin/nutch generate crawl/crawldb crawl/segments -topN 50000
bin/nutch fetch crawl/segments/... -threads 50
bin/nutch parse crawl/segments/...
bin/nutch updatedb crawl/crawldb crawl/segments/...
# 進程 2-4 同理,使用不同 urls/partN
# 合並數據:所有進程輸出到同一 crawl/crawldb (需鎖) 或最後合併 segments
更佳方案:使用 Nutch 2.x + HBase 或遷移至 Scrapy-Cluster / Scrapy-Redis,原生支持分佈式去重調度。
| 特性 | Nutch 1.x | Scrapy | Scrapy-Cluster |
|---|---|---|---|
| 架構 | 批處理、MapReduce 風格 | 異步事件驅動 | Redis 分佈式調度 |
| JS 渲染 | 無 (需 Selenium 外掛) | Scrapy-Splash/Playwright | 同 Scrapy |
| 學習曲線 | 陡峭、配置繁雜 | 平緩、Pythonic | 中等 |
| 生態活躍度 | 低 (Apache 項目,更新慢) | 高 | 中 |
| 推薦場景 | 已有 Hadoop 集群、海量離線批處理 | 通用爬蟲、增量、動態頁面 | 大規模分佈式增量爬取 |
若畢設時間緊、不要求 Hadoop 生態,**直接用 Scrapy + Scrapy-Redis** 重寫,開發效率提升 5-10 倍,彈性調度、JS 渲染、反爬對抗生態完善。Nutch 適合「已有 HBase/Hadoop、純靜態頁、超大規模離線全量抓取」場景。