docker環境定時啟動selenium爬蟲抓取資料
今天要說明的是在環境沒有安裝python selenium的情況底下,如何透過定時啟動docker的方式來啟動爬蟲抓取資料
環境準備 :
環境的部分,一定要安裝docker,還不知道怎麼安裝可以參考
當然,一般來說伺服器的環境是在Linux底下,也可以參考
接著,我們在python 2.7的docker環境下安裝所需要的套件,Dockerfile如下,
也可以直接從我的docker hub上拉下來
https://hub.docker.com/r/virtualorz/python_selenium
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
FROM python:2.7 # install google chrome RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - RUN sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' RUN apt-get -y update RUN apt-get install -y google-chrome-stable # install Chromium RUN apt-get update # install chromedriver RUN apt-get install -yqq unzip RUN wget -O /tmp/chromedriver.zip http://chromedriver.storage.googleapis.com/`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE`/chromedriver_linux64.zip RUN unzip /tmp/chromedriver.zip chromedriver -d /usr/local/bin/ # install xvfb RUN apt-get install -yqq xvfb RUN pip install pyvirtualdisplay # set display port and dbus env to avoid hanging ENV DISPLAY=:99 ENV DBUS_SESSION_BUS_ADDRESS=/dev/null # upgrade pip RUN pip install --upgrade pip # install selenium RUN pip install selenium #install request RUN pip install requests #install python-dotenv RUN pip install -U python-dotenv |
可執行SH檔 :
環境準備好了,下一個步驟就是要準備一個可以讓linux定期叫起來執行的sh檔
這個檔案就是啟動docker並且執行我們要的python程式,這樣子而已
1 2 3 |
cd PATHI_TO_PYTHON_SCRIPT docker rm python_selenium docker run --name python_selenium -it -d -w /usr/workspace -v $(pwd):/usr/workspace virtualorz/python_selenium python getEP.py |
OK,我逐行來說明一下
1. 跳到我們存放python程式的資料夾,因為我們要直接把這個資料夾掛進docker的WORKDIR
2. 移除掉python_selenium這個容易,當然名字會因為docker run –name設定不同而不同
3. 透過docker run 把virtualorz/python_selenium給容器化叫起來,並且
-w : 設定WORKDIR為 /usr/workspace
-v : 將當前目錄 $(pwd),掛載到容器的 /usr/workspace,這就是為什麼第一行要先切換到儲存python程式的資料夾原因
python getEP.py : 這邊是給容器起來之後的程式命令,命令他去執行 “python getEP.py”也就會執行我們要的爬蟲了
這邊是利用docker執行的特性,一般我們執行docker run 都會在後面接上bash ,讓他停在bash上等
而這邊直接讓他執行python,執行完畢後容器就會被關閉,也就是第二行的先移除上次執行的容器
crontab 排程 :
最後,交給linux crontab排程,假設我們要每分鐘都執行
1 |
* * * * * /bin/bash /PATH_TO_SH_FILE |
使用crontab -e 來編輯,請bash來叫起剛剛我們寫好的.sh檔就行了
這樣一來我們就可以透過crontab 設定多久的時間需要排程執行python爬蟲,原理就是透過docker叫起容器執行完畢後會自行關閉