红联Linux门户
Linux帮助

使用Docker部署Scrapy爬虫

发布时间:2015-10-07 10:04:22来源:linux网站作者:wang_san_shi

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