在經過前面兩天的導論與名詞解釋之後,第三天我要帶給讀者的是有關於環境建置的部份,俗話說地好,「工欲善其事,必先利其器」。
在開始後面爬蟲專案的開發與案例研討之前,我們需要有一個良好的開發環境。本文章,就是要帶領各位讀者來建置自己需要的爬蟲開發環境。
在爬蟲開發環境方面,為了讓讀者可以更容易專住在案例研討與研究上面,開發環境選用的部份會以Docker
作為建置開發環境的基礎,一方面讓讀者環境叫容易建置起來之外,也可以讓讀者不必花較多的時間在處理環境建置上。
以下是本次爬蟲會需要用的Dockerfile
:
FROM ubuntu:16.04
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update
RUN apt-get install -y software-properties-common python-software-properties
RUN LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php
RUN apt-get update
RUN apt-get install -y unzip curl apt-transport-https apt-utils curl git-core php7.2-cli php7.2-curl
RUN apt-get install -y php7.2-xml php7.2-dom php7.2-xsl php7.2-json php7.2-mbstring php7.2-zip
RUN apt-get install -y libcurl3-openssl-dev
RUN apt-get clean
WORKDIR /root/
RUN curl -sS https://getcomposer.org/installer | php
RUN php ~/composer.phar require guzzlehttp/guzzle:^6.2
RUN php ~/composer.phar require symfony/dom-crawler:^4.3
RUN php ~/composer.phar require symfony/css-selector:^4.3
透過上述的Dockerfile
我們可以知道:
Ubuntu 16.04
根檔案系統 (root file system)PHP
版本,這裡使用的是PHP 7.2
PHP
擴展 (extensions)Composer
,Composer
是一個相依管理PHP
套件的工具,就如同Python pip
以及Node.js
的NPM
一樣guzzlehttp/guzzle
,這是幫助我們在發送HTTP
請求的時候可以比較便利,當然也可以使用原生的PHP-cURL
函數做到,但是有時候大家還是比較喜歡Modren PHP
的OOP
呼叫吧XDsymfony/dom-crawler
與symfony/css-selector
。
HTML tree
的爬蟲,另外一個是使用CSS
方式的選擇器找到我們指定的HTML
元素與想要的內容。到這邊,環境大致上已經建置完成了。當然,在PHP
中還是有一些比較小眾套件也可以達到與Guzzle
發送HTTP
請求。和dom-crawler
一樣可以解析HTML
內容的套件。
不過本篇文章中,我覺得還是著重在用一些比較熱門的套件上作為開發爬蟲的環境,至於其他的熱門小眾套件,不會在這一系列的教學文章中出現,會在我的部落格文章以短篇技術文章發表的方式出現。
寫好了Dockerfile
之後,接下來就是編好Docker image
的時候了,我先假設讀者作業系統是類Unix
,舉凡MAC OS
任一Linux
發行版本等。
已經在host OS
安裝好Docker
指令了,若沒有的話,可以參考「參考連結」章節。
按照下面的步驟,即可以把本次系列文章中所要用到的開發環境建置好了!
mkdir ithome-lab
cd ithom-lab
# using vim to create and edit Dockerfile
vim Dockerfile
docker build -t php_crawler .
# done.
在下一個系列,會開始帶入如何開發爬蟲與第一個爬蟲開發案例探討(1-1),敬請期待!
建議DEBIAN_FRONTEND noninteractive
不要設程ENV
之後如果要attach到conainer的bash很容易出事
在RUN前指定就好
請問,我按照這個Dockerfile來做,但是一直顯示Unable to locate php7.2-cli,這個問題應該怎麼修正才行呢?