前面我们讲了python爬虫用到的工具及模块:phantomjs、beautifulsoup4、selenium、lxml等,如果我们想随时随地用到这个已经搭建好的python环境,这就有两个方案:一是利用vagrant打包python环境的box;二是创建一个python环境的docker镜像。
在此我们介绍下第二种方案,我们利用dockerfile直接创建docker镜像即可,当然前提是你能运行docker环境。
我们使用的是ubuntu16.04
1.安装docker
wget -qO- https://get.docker.com/ | sh
2.创建目录并创建python需要安装的模块
mkdir -p /docker/python
vim requirements.txt
beautifulsoup4
lxml
Selenium
3.创建Dockerfile文件
FROM ubuntu
MAINTAINER yanggd
RUN mkdir -p /app
WORKDIR /app
ADD requirements.txt requirements.txt
RUN apt-get update \
#安装phantomjs依赖
&& apt-get install -y build-essential g++ flex bison gperf ruby perl libsqlite3-dev libfontconfig1-dev libicu-dev libfreetype6 libssl-dev libpng-dev libjpeg-dev libx11-dev libxext-dev python wget vim\
#安装最新版本pip
&& wget -O /tmp/get-pip.py 'https://bootstrap.pypa.io/get-pip.py' \
&& python /tmp/get-pip.py \
&& rm /tmp/get-pip.py \
#安装python模块beautifulsoup4 selenium lxml
&& pip install -r requirements.txt \
&& wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2 -O /tmp/phantomjs.tar.bz2 \
&& tar -jxvf /tmp/phantomjs.tar.bz2 -C /usr/local/ \
&& ln -s /usr/local/phantomjs-2.1.1-linux-x86_64 /usr/local/phantomjs \
&& rm /tmp/phantomjs.tar.bz2 \
#安装python模块mysqldb
&& apt-get install -y python-dev libmysqlclient-dev \
&& pip install MySQL-python
注意:
(1)安装python mysqldb连接数据模块时,一定要安装python-dev libmysqlclient-dev,否则会出现mysql_config等错误;可以避免先安装 mysql的麻烦。
(2)dockerfile中的ADD COPY命令是添加当前目录下的文件到docker中的当前目录WORKDIR /app 下;另外若添加的是tar.gz等压缩文件时,会在docker中被认为是一个目录,而不是压缩文件,因此不可以在后续命令中用tar解压;但是wget的tar.gz会被认为是压缩文件,可以用tar解压
4.建立镜像
docker build -t ubuntu/python2.7 .
“.”表示Dockerfile所在当前目录,这样我们就创建了一个ubuntu/python2.7镜像
root@test ~/docker/python# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu/python2.7 latest 794e1613fe03 7 hours ago 741.2 MB
mysql latest b7dc06006192 2 weeks ago 385.6 MB
python 2.7 4c5f5839b372 3 weeks ago 675.3 MB
ubuntu latest bd3d4369aebc 3 weeks ago 126.6 MB
创建完成后我们就可以在docker中编写python爬虫了:
docker run -it ubuntu/python2.7 /bin/bash
注意:
此时虽然安装了python爬虫的基础环境,但是有的工具默认是没有安装的如wget ping 等,我们在docker中安装这些工具后一定要docker commit下,否则退出docker重新登陆后,原来安装的工具就不存在了,需要重新安装,是多么蛋疼的啊。
总结:
虽然我们可以直接基于python:2.7镜像建立一个适合我们用的python环境,而且相对于ubuntu镜像建立更加轻量,但是毕竟python:2.7基础只有python,无法安装phantomjs工具及依赖,这我已经测试。
当然我们也可以通过vagrant的box来随时搭建python环境,但是这相对与docker比较重量级,见仁见智吧。