Crawl via Docker
寫在前頭
近來,想嘗試在 CentOS 7 x86_64 安裝 Scrapy 卻一直受挫,原因是 lxml 無法順利編譯,一些該裝套件(libxml2、libxslt、libxslt-devel 也沒少裝,可以試的方法也都試過,耗了許多寶貴時間,最後,宣告失敗。
根據以往經驗是在 Ubuntu 上安裝,過程簡單且順利,還順便做了 Vagrant File,其實我大可以在繼續用 Vagrant 方式執行爬蟲,但這次我是使用 DigitalOcean 陽春機,記憶體只有 512 MB,實在不想為了爬個資料就建一個笨重 VM,來拖累整體資源,讓人於心不忍呀!
有鑑於此,我改採用輕量級的 Docker 來執行爬蟲工作,解題過程如下:
安裝 Docker
在 CentOS 7 安裝 Docker 很容易,直接使用 yum install
即可,值得一提是 CentOS 7 的 firewalld 防火牆與 Docker 會小打架, firewalld 啟動或重新啟動時,會移除 DOCKER
防火牆設定,所以~啟動或重啟 firewalld 時,記得要在打開 Docker。
1 | $ sudo yum install docker |
Dockerfile
現在需要一個能跑 Scrapy 的爬蟲環境,既然 Ubuntu 安裝容易,就拿原生 Ubuntu 作為 Image OS,在安裝 Scrapy 以及爬蟲程式,這邊是以 eia_crawler 為例子。
1 | # Dockerfile for eia_crawler project |
Docker Container
定義好後,就建立一個 Image,並召喚一個 Docker Container 在背景執行它。另外,要小心地方,是每次執行一個 Container 都會是一個乾淨的 Image 環境,所以~執行結束後,還得想個法子把結果拿回來,這邊是用 Volumn 方式,將檔案 Copy 回來。
1 | $ sudo docker build -t eia-crawler . |
結語
使用 Docker 好處是不用為了爬資料而建立一個 VM,少了開機程序,所耗資源相對少很多,速度明顯變快,難怪 Docker 會如此火紅,有機會在寫一些 Docker 內容。