您的位置:首页 > 运维架构 > Docker

使用Docker部署Scrapy爬虫

2015-09-02 15:15 666 查看
使用Docker部署Scrapy爬虫

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/2f8548e541de0b65c214d4195d02ade3104ee6acc8a8da0d0478557afc207d10/_data /program:/home/python/PycharmProjects/baidutieba]

可以看到/data对应主机目录/var/lib/docker/volumes/2f8548e541de0b65c214d4195d02ade3104ee6acc8a8da0d0478557afc207d10/_data,OK进入查收下载内容吧。

      
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: