好文分享 — Scrapy vs. Crawlee
軟體開發相關業務裡,網路爬蟲這 1 項其實相當常見,例如商品比價、股票資訊、房屋成交紀錄、 Zipcode 資料,甚至從競爭者的網站「借」資料等等,只要你從事軟體開發就多多少少都會遇到這些需求。
而談到開發網路爬蟲,不少人都會想到使用 Python 。
理由除了 Python 好寫、容易上手之外,大概是許多課程、教學資源都使用 Python 開發網路爬蟲的緣故。
Python 目前也有不少 packages 可以用來開發網路爬蟲,包含:
- Beautiful Soup
- lxml
- requests
- AIOHTTP
不過上述這些 packages 的定位並不是框架,目前比較知名的 Python 網路爬蟲框架是 Scrapy 。
Scrapy 將 1 個網路爬蟲的構成拆解為多個步驟,以寫 class 的方式進行開發,在這個框架下不僅可以開發出具結構化的爬蟲程式,還可以利用 Scrapy 所提供的各種基礎建設,減少重複開發的成本,例如能自動更換 Proxy 的 scrapy middleware, 自動 retry 的 middleware 等等,而且 Scrapy 專注的是框架,所以在這個框架下,我們依然能使用上述提到的各種 packages ,使用上沒有衝突。
p.s. Scrapy 也支援 asyncio
但 Scrapy 預設無法處理使用 JavaScript 渲染產生的網頁或元件(例如 React.js, Next.js),所以必須使用 Selenium, Playwright, Puppeteer 等 browser automation 技術才能處理,使用上沒有天生支援這些技術的其他框架來得方便。
從 Scrapy vs. Crawlee 1 文所提供的比較來看,目前針對 JavaScript 渲染產生的網頁,使用 JavaScript 開發的 Crawlee 會是不錯的選擇。
Crawlee 目前不僅支援 Playwright 與 Puppeteer, 也有支援 autoscaling (可以增加平行處理的網路爬蟲數),而且連 Proxy 也有支援,在防止爬蟲被阻擋的技術上,則多了可以修改 browser fingerprints 的功能,避免網路爬蟲所使用的瀏覽器被記住特徵而被阻擋。
如果你有需要爬梳 JavaScript 渲染產生的網頁,而且不排斥使用 JavaScript 的話,不妨可以試試 Crawlee 。
詳細的 Scrapy 與 Crawlee 比較,可以閱讀 Scrapy vs. Crawlee 1 文。