Python3网络爬虫实战---十二、部署相关库的安装:Docker、Scrapyd

上一篇文章: Python3网络爬虫实战---十一、爬虫框架的安装:ScrapySplash、ScrapyRedis
下一篇文章: Python3网络爬虫实战---1三、部署相关库ScrapydClient、ScrapydAPI

若是想要大规模抓取数据,那么必定会用到分布式爬虫,对于分布式爬虫来讲,咱们必定须要多台主机,每台主机多个爬虫任务,可是源代码其实只有一份。那么咱们须要作的就是将一份代码同时部署到多台主机上来协同运行,那么怎么去部署就又是一个值得思考的问题。html

对于 Scrapy 来讲,它有一个扩展组件叫作 Scrapyd,咱们只须要安装 Scrapyd 便可远程管理 Scrapy 任务,包括部署源码、启动任务、监放任务等操做。另外还有 ScrapydClient 和 ScrapydAPI 来帮助咱们更方便地完成部署和监听操做。python

另外还有一种部署方式就是 Docker 集群部署,咱们只须要将爬虫制做为 Docker 镜像,只要主机安装了 Docker,就能够直接运行爬虫,而无需再去担忧环境配置、版本问题。linux

本节咱们就来介绍一下相关环境的配置过程。nginx

Docker的安装

Docker 是一种容器技术,它能够将应用和环境等进行打包,造成一个独立的,相似于 iOS 的 APP 形式的「应用」,这个应用能够直接被分发到任意一个支持 Docker 的环境中,经过简单的命令便可启动运行。Docker 是一种最流行的容器化实现方案。和虚拟化技术相似,它极大的方便了应用服务的部署;又与虚拟化技术不一样,它以一种更轻量的方式实现了应用服务的打包。使用 Docker 可让每一个应用彼此相互隔离,在同一台机器上同时运行多个应用,不过他们彼此之间共享同一个操做系统。Docker 的优点在于,它能够在更细的粒度上进行资源的管理,也比虚拟化技术更加节约资源。
本段参考:DaoCloud官方文档
对于爬虫来讲,若是咱们须要大规模部署爬虫系统的话,用 Docker 会大大提升效率,工欲善其事,必先利其器。
本节来介绍一下三大平台下 Docker 的安装方式。git

1. 相关连接

2. Linux下的安装

详细的分步骤的安装说明能够参见官方文档:https://docs.docker.com/engin...
在官方文档中详细说明了不一样 Linux 系统的安装方法,安装流程根据文档一步步执行便可安装成功。
可是为了使得安装更加方便,Docker 官方还提供了一键安装脚本,使用它会使得安装更加便捷,不用再去一步步执行命令安装了,在此介绍一下一键脚本安装方式。
首先是 Docker 官方提供的安装脚本,相比其余脚本,官方提供的必定更靠谱,安装命令以下:github

curl -sSL https://get.docker.com/ | sh

只要执行如上一条命令,等待一下子 Docker 便会安装完成,很是方便。
可是官方脚本安装有一个缺点,那就是慢,也可能下载超时,因此为了加快下载速度,咱们可使用国内的镜像来安装,因此在这里还有阿里云和 DaoCloud 的安装脚本。
阿里云安装脚本:web

curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -

DaoCloud 安装脚本:docker

curl -sSL https://get.daocloud.io/docker | sh

两个脚本能够任选其一,速度都很是不错。
等待脚本执行完毕以后,就可使用 Docker 相关命令了,如运行测试 Hello World 镜像:json

docker run hello-world

运行结果:ubuntu

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
78445dd45222: Pull complete 
Digest: sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.

若是出现上文相似提示内容则证实 Docker 能够正常使用了。

3. Mac下的安装

Mac 平台一样有两种选择,Docker for Mac 和 Docker Toolbox。
Docker for Mac 要求系统为 OS X EI Captain 10.11 或更新,至少 4GB 内存,若是你的系统知足此要求,则强烈建议安装 Docker for Mac。
可使用 HomeBrew 安装,安装命令以下:

brew cask install docker

另外也能够手动下载安装包安装,安装包下载地址为:https://download.docker.com/m...
下载完成以后直接双击安装包,而后将程序拖动到应用程序中便可。
点击程序图标运行 Docker,会发如今菜单栏中出现了 Docker 的图标,如图 1-83 中的第三个小鲸鱼图标:

clipboard.png

图 1-83 菜单栏
点击图标展开菜单以后,再点击 Start 按钮便可启动 Docker,启动成功便会提示 Docker is running,如图 1-84 所示:

clipboard.png

图 1-84 运行页面
随后咱们就能够在命令行下使用 Docker 命令了。
可使用以下命令测试运行:

sudo docker run hello-world

运行结果如图 1-85 所示:

clipboard.png

图 1-85 运行结果
若是出现相似输出则证实 Docker 已经成功安装。
若是系统不知足要求,能够下载 Docker Toolbox,其安装说明为:https://docs.docker.com/toolb...
关于 Docker for Mac 和 Docker Toolbox 的区别,能够参见:https://docs.docker.com/docke...

4. 镜像加速

安装好 Docker 以后,在运行测试命令时,咱们会发现它首先会下载一个 Hello World 的镜像,而后将其运行,可是下载速度有时候会很是慢,这是由于它默认仍是从国外的 Docker Hub 下载的,因此为了提升镜像的下载速度,咱们还可使用国内镜像来加速下载,因此这就有了 Docker 加速器一说。
推荐的 Docker 加速器有 DaoCloud 和阿里云。
DaoCloud:https://www.daocloud.io/mirror
阿里云:https://cr.console.aliyun.com...
不一样平台的镜像加速方法配置能够参考 DaoCloud 的官方文档:http://guide.daocloud.io/dcs/...
配置完成以后,能够发现镜像的下载速度会快很是多。
以上即是 Docker 的安装方式说明。

Scrapyd的安装

Scrapyd 是一个用于部署和运行 Scrapy 项目的工具。有了它,你能够将写好的 Scrapy 项目上传到云主机并经过 API 来控制它的运行。
既然是 Scrapy 项目部署,因此基本上都使用 Linux 主机,因此本节的安装是针对于 Linux 主机的。

1. 相关连接

2. Pip安装

推荐使用 Pip 安装,命令以下:

pip3 install scrapyd

3. 配置

安装完毕以后须要新建一个配置文件 /etc/scrapyd/scrapyd.conf,Scrapyd 在运行的时候会读取此配置文件。
在 Scrapyd 1.2 版本以后不会自动建立该文件,须要咱们自行添加。
执行命令新建文件:

sudo mkdir /etc/scrapyd
sudo vi /etc/scrapyd/scrapyd.conf

写入以下内容:

[scrapyd]
eggs_dir    = eggs
logs_dir    = logs
items_dir   =
jobs_to_keep = 5
dbs_dir     = dbs
max_proc    = 0
max_proc_per_cpu = 10
finished_to_keep = 100
poll_interval = 5.0
bind_address = 0.0.0.0
http_port   = 6800
debug       = off
runner      = scrapyd.runner
application = scrapyd.app.application
launcher    = scrapyd.launcher.Launcher
webroot     = scrapyd.website.Root

[services]
schedule.json     = scrapyd.webservice.Schedule
cancel.json       = scrapyd.webservice.Cancel
addversion.json   = scrapyd.webservice.AddVersion
listprojects.json = scrapyd.webservice.ListProjects
listversions.json = scrapyd.webservice.ListVersions
listspiders.json  = scrapyd.webservice.ListSpiders
delproject.json   = scrapyd.webservice.DeleteProject
delversion.json   = scrapyd.webservice.DeleteVersion
listjobs.json     = scrapyd.webservice.ListJobs
daemonstatus.json = scrapyd.webservice.DaemonStatus

配置文件的内容能够参见官方文档:https://scrapyd.readthedocs.i...,在这里的配置文件有所修改,其中之一是 max_proc_per_cpu 官方默认为 4,即一台主机每一个 CPU 最多运行 4 个Scrapy Job,在此提升为 10,另一个是 bind_address,默认为本地 127.0.0.1,在此修改成 0.0.0.0,以使外网能够访问。

4. 后台运行

因为 Scrapyd 是一个纯 Python 项目,在这里能够直接调用 scrapyd 来运行,为了使程序一直在后台运行,Linux 和 Mac 可使用以下命令:

(scrapyd > /dev/null &)

这样 Scrapyd 就会在后台持续运行了,控制台输出直接忽略,固然若是想记录输出日志能够修改输出目标,如:

(scrapyd > ~/scrapyd.log &)

则会输出 Scrapyd 运行输出到 ~/scrapyd.log 文件中。
运行以后即可以在浏览器的 6800 访问 WebUI 了,能够简略看到当前 Scrapyd 的运行 Job、Log 等内容,如图 1-86 所示:

clipboard.png

图 1-86 Scrapyd 首页
固然运行 Scrapyd 更佳的方式是使用 Supervisor 守护进程运行,若是感兴趣能够参考:http://supervisord.org/
另外 Scrapyd 也支持 Docker,在后文咱们会介绍 Scrapyd Docker 镜像的制做和运行方法。

5. 访问认证

限制配置完成以后 Scrapyd 和它的接口都是能够公开访问的,若是要想配置访问认证的话能够借助于 Nginx 作反向代理,在这里须要先安装 Nginx 服务器。
在此以 Ubuntu 为例进行说明,安装命令以下:

sudo apt-get install nginx

而后修改 Nginx 的配置文件 nginx.conf,增长以下配置:

http {
    server {
        listen 6801;
        location / {
            proxy_pass    http://127.0.0.1:6800/;
            auth_basic    "Restricted";
            auth_basic_user_file    /etc/nginx/conf.d/.htpasswd;
        }
    }
}

在这里使用的用户名密码配置放置在 /etc/nginx/conf.d 目录,咱们须要使用 htpasswd 命令建立,例如建立一个用户名为 admin 的文件,命令以下:

htpasswd -c .htpasswd admin

接下就会提示咱们输入密码,输入两次以后,就会生成密码文件,查看一下内容:

cat .htpasswd 
admin:5ZBxQr0rCqwbc

配置完成以后咱们重启一下 Nginx 服务,运行以下命令:

sudo nginx -s reload

这样就成功配置了 Scrapyd 的访问认证了。

6. 结语

本节介绍了 Scrapyd 的安装方法,在后文咱们会详细了解到 Scrapy 项目的部署及项目运行状态监控方法。

上一篇文章: Python3网络爬虫实战---十一、爬虫框架的安装:ScrapySplash、ScrapyRedis
下一篇文章: Python3网络爬虫实战---1三、部署相关库ScrapydClient、ScrapydAPI
相关文章
相关标签/搜索