乐趣区

Python3网络爬虫实战12部署相关库的安装DockerScrapyd

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

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

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

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

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

Docker 的安装

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

1. 相关链接

  • 官方网站:https://www.docker.com
  • GitHub:https://github.com/docker
  • Docker Hub:https://hub.docker.com
  • 官方文档:https://docs.docker.com
  • DaoCloud:http://www.daocloud.io
  • 中文社区:http://www.docker.org.cn
  • 中文教程:http://www.runoob.com/docker/…
  • 推荐书籍:https://yeasy.gitbooks.io/doc…

2. Linux 下的安装

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

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

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

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

DaoCloud 安装脚本:

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

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

docker run hello-world

运行结果:

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 中的第三个小鲸鱼图标:

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

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

sudo docker run hello-world

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

图 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. 相关链接

  • GitHub:https://github.com/scrapy/scr…
  • PyPi:https://pypi.python.org/pypi/…
  • 官方文档:https://scrapyd.readthedocs.io

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 所示:

图 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 网络爬虫实战 —11、爬虫框架的安装:ScrapySplash、ScrapyRedis
下一篇文章:Python3 网络爬虫实战 —13、部署相关库 ScrapydClient、ScrapydAPI

退出移动版