1、目的与步骤
环境:Ubuntu14.04 LTS,爬虫程序使用scrapy开发,功能比较简单,就是下载百度贴吧第一页中所有帖子中的图片。
目的:将基于Scrapy开发的爬虫程序发布到docker容器中。
步骤:
a.在主机上使用setuptools打包python程序,包括一个运行爬虫的命令行;
b.定义dockerfile,内容包括安装ssh、pip、setuptools、scrapy,并挂载volume(/data)用来作为下载路径,然后创建镜像;
c.由镜像启动容器,同时挂载主机目录(爬虫项目目录),然后安装程序;
d.执行命令开始下载图片。
2、步骤一:打包爬虫程序
前提:在主机上安装pip,使用pip安装setuptools。
主机上的项目目录结构为:
baidutieba
|--baidutieba
| |--spiders
| | |--__init__.py
| | |--baidutieba_spider.py
| |--__init__.py
| |--items.py
| |--pipelines.py
| |--settings.py
|--scrapy.cfg
因为功能比较简单,代码全部在baidutieba_spider.py中,该文件内容如下:
...
class TiebaSpider(Spider):
name = "tiebaspider"
allowed_domains = ["tieba.baidu.com"]
...
def runspider():
process = CrawlerProcess({
'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'
})
process.crawl(TiebaSpider)
process.start()
类TiebaSpider定义了URL的处理,以及下载的行为。
runspider方法开始运行爬虫(后面会将这个方法映射到一条console命令进行安装)。
在项目根目录下创建setup.py,内容如下:
from setuptools import setup, find_packages
setup(
name = "baidutieba",
version = "0.1",
packages = find_packages(),
entry_points={
'console_scripts': [
'runspider = baidutieba.spiders.baidutieba_spider:runspider',
]
}
)
使用这个setup.py安装后的系统可以通过命令runspider命令直接运行爬虫。
为了打包程序,确认当前在项目根目录,然后执行下列命令:
$ python setup.py bdist_egg
执行成功后,可以看到项目根目录下生成了一些打包文件。
3、步骤二:定义dockerfile
$ vim scrapy_dockerfile
内容如下(因为是docker镜像,所以一些依赖包需要单独安装):
FROM ubuntu
RUN apt-get update
RUN apt-get -y dist-upgrade
RUN apt-get install -y openssh-server
RUN apt-get install -y python2.7-dev python-pip
RUN apt-get install -y zlib1g-dev libffi-dev libssl-dev
RUN apt-get install -y libxml2-dev libxslt1-dev
RUN pip install setuptools
RUN pip install Scrapy
VOLUME /data
使用dockerfile创建image,首先进入包含dockerfile的目录,然后执行:
$ docker build -f scrapy_dockerfile -t scrapy_image .
4、步骤三:由镜像启动容器并挂载项目目录
启动容器(/program挂载了项目根目录,/data为dockerfile中定义的volume)并进入容器的命令行:
$ docker run -it -v /home/python/PycharmProjects/baidutieba:/program scrapy_image /bin/bash
安装python的scrapy项目(/program挂载的是主机上的项目根目录,该目录下有已经创建的setup.py文件和打包文件):
# cd program
# python setup.py install
安装完成后就可以执行命令了,执行命令,运行爬虫:
# runspider
可以看到开始下载了。
5、查看下载内容
因为是图片下载到容器的/data目录下,首先要找到其对应的主机目录:
# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b544f1388274 scrapy_image "/bin/bash" 14 minutes ago Up 14 minutes
# docker inspect -f {{.Volumes}} jovial_carson
map[/data:/var/lib/docker/volumes/2f8548e541de0b65c214d4195d02ade3104ee6acc8a8da0d0478557
afc207d10/_data /program:/home/python/PycharmProjects/baidutieba]
可以看到/data对应主机目录
/var/lib/docker/volumes/2f8548e541de0b65c214d4195d02ade3104ee6acc8a8da0d0478557afc207d10
/_data,OK进入查收下载内容吧。
Ubuntu 14.04 64bit上安装Scrapy:http://www.linuxdiyf.com/linux/13980.html
Ubuntu14.04下安装scrapy:http://www.linuxdiyf.com/linux/13816.html
如何在Ubuntu 14.04 LTS安装网络爬虫工具:Scrapy:http://www.linuxdiyf.com/linux/9985.html
CentOS 6.4安装搭建Scrapy 0.22环境:http://www.linuxdiyf.com/linux/13205.html