使用Docker部署Scrapy爬虫



使用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进入查收下载内容吧。
























      

你可能感兴趣的:(Docker)