Scrapyd-Client 的使用
前面我们了解了Scrapyd的基本用法,Scrapyd提供了一系列API来帮我们实现Scrapy爬虫项目的管理,不过其中有一个不是很方便的流程,那就是部署,即如何将Scrapy项目部署到Scrapyd上。一般来说,部署的这个过程需要把项目打包成egg文件,可是这个打包过程其实相对还是比较烦琐的所以这里推荐由现成的工具来完成部署过程,它叫作 Scrapyd-Client。本节将简单介绍使用 Scrapyd-Client 部署 Scrapy 项目的方法。
准备工作
请先确保 Scrapyd-Client 已经正确安装,使用 pip3 安装即可:
pip3 install scrapyd-client
具体的安装方式可以参考: https://scrape.center/scrapyd-client 。
Scrapyd-Client 的功能
为了方便 Scrapy 项目的部署,Scrapyd-Client 提供两个功能。
-
将项目打包成 egg 文件。
-
将打包生成的 egg 文件通过 addversion.json 接口部署到 Scrapyd 上。
也就是说,Scrapyd-Client 帮我们把部署全部实现了,我们不需要再去关心 egg 文件是怎样生成的,也不需要再去读 egg 文件并请求接口上传了,这一切的操作只需要执行一个命令即可完成。
Scrapyd-Client 部署
要部署 Scrapy 项目,我们首先需要修改一下项目的配置文件。例如我们之前写的 Scrapy 爬虫项目,在项目的第一层会有一个 scrapy.cfg 文件,它的内容如下:
[settings]
default = scrapycompositedemo.settings
[deploy]
#url = http://localhost:6800/
project = scrapycompositedemo
这里我们需要配置一下 deploy 部分,例如我们要将项目部署到 A 主机(192.168.2.3)的 Scrapyd 上,此时就需要将内容修改为:
[deploy]
url = http://192.168.2.3:6800/
project = scrapycompositedemo
这样我们再在 scrapy.cfg 文件所在路径下执行如下命令:
scrapyd-deploy
运行结果如下:
Packing version 1501682277
Deploying to project "scrapycompositedemo" in http://192.168.2.3:6800/addversion.json
Server response (200):
{"status": "ok", "spiders": 1, "node_name": "vm1", "project": "scrapycompositedemo", "version": "1501682277"}
返回这样的结果就代表部署成功了。
我们也可以指定项目版本(如果 nonspecific 的话,默认为当前时间戳),此时可以通过 version 参数传递,例如:
scrapyd-deploy --version 201707131455
值得注意的是,在 Python 3 的 Scrapyd 1.2.0 版本中,我们不要指定版本号为带字母的字符串,要为纯数字,否则可能会报错。
另外,如果有多台主机,我们可以配置各台主机的别名,例如修改配置文件为:
[deploy:vm1]
url = http://192.168.2.3:6800/
project = scrapycompositedemo
[deploy:vm2]
url = http://192.168.2.4:6800/
project = scrapycompositedemo
[deploy:vm3]
url = http://192.168.2.5:6800/
project = scrapycompositedemo
有多台主机的话,就在此统一配置,一台主机对应一组配置,在 deploy 后面加上主机的别名即可。这样如果我们想将项目部署到 IP 为 192.168.2.5 的 vm3 主机上,只需要执行如下命令:
scrapyd-deploy vm3
如此一来,如果有多台主机,我们只需要在 scrapy.cfg 文件中配置好各台主机的 Scrapyd 地址,然后调用 scrapyd-deploy 命令加主机名称即可实现部署,非常方便。
默认情况下,Scrapyd 是没有登录验证的,比如 Basic Auth 的功能是不具备的,如果想要开启,可以使用 Nginx 服务器实现。比如此处利用 Nginx 实现了 Scrapyd 的登录验证,Nginx 的监听端口修改为了 6801,用户名和密码都是 admin,那么 scrapy.cfg 可以这样配置:
[deploy:vm1]
url = http://192.168.2.3:6801/
project = scrapycompositedemo
username = admin
password = admin
...
这样通过加入 username 和 password 字段,我们就可以在部署时自动进行 Basic Auth 验证,然后成功实现部署。