首先,scrapyd部署分为服务端和客户端,服务端为scrapyd安装在服务器上,而客户端为scrapyd-client, 安装在本地开发机.
scrapyd
安装scrapyd
pip3 install scrapyd # 它默认也会将scrapy安装
创建配置文件:scrapyd.conf
注意:
# 后面的的内容不要写,这里是方便理解.
sudo mkdir /etc/scrapyd
sudo vi /etc/scrapyd/scrapyd.conf
#写入下面的配置
[scrapyd]
eggs_dir = /opt/project/eggs # 存放egg文件目录
logs_dir = /opt/project/logs # 存放日志目录
items_dir =
jobs_to_keep = 5
dbs_dir = /opt/project/dbs # 爬虫的数据存放目录
max_proc = 0
max_proc_per_cpu = 4 # 每个cpu最多运行多少个scrapy
finished_to_keep = 100
poll_interval = 5.0
bind_address = 0.0.0.0 # 绑定0.0.0.0 使外网可以访问,方便scrapyclient可以访问
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
#在后台运行,并记录日志
nohup scrapyd > /opt/project/scrapyd.log 2>&1 &
运行这条命令会返回一个进程号,后台运行scrapyd的进程
此时可以通过ip:6800访问了
服务端到此完成,下面是本地scrapyd-client的操作
scrapyd-client
安装scrapyd-client
pip3 install scrapyd-client
检查是否安装成功
scrapyd-deploy -h
修改写好的scrapy项目 的配置,该文件默认在项目根目录下,默认文件名为scrapy.cfg
配置
# 修改项目目录下的cfg
[settings]
default = sun.settings
[deploy]
url = http://107.174.101.162:6800/
project = sun
这样我们再在 scrapy.cfg 文件所在路径记录进入scrapy环境执行如下命令:
scrapyd-deploy
成功返回数据:
{"version": "1576844155", "node_name": "CorruptPositive-VM", "project": "sun", "status": "ok", "spiders": 1}
在项目目录下生成了文件
(sun_env) root@CorruptPositive-VM:/opt# ls project/eggs/sun/
1576844155.egg
后面的这串数字代表一个版本,我们可以通过下面的命令指定
scrapyd-deploy --version 201707131455
刷新网页则有如下显示,可以看到sun项目了:即上图中的: available projects :sun
接口
下面是一些scrapyd的接口,方便我们在本地远程操作scrapyd为我们服务
daemonstatus.json
这个接口负责查看 Scrapyd 当前的服务和任务状态,我们可以用 curl 命令来请求这个接口,命令如下
curl http://192.168.220.128:6800/daemonstatus.json
{"pending": 0, "status": "ok", "running": 0, "finished": 0, "node_name": "CorruptPositive-VM"}
返回结果是 Json 字符串,status 是当前运行状态, finished 代表当前已经完成的 Scrapy 任务,running 代表正在运行的 Scrapy 任务,pending 代表等待被调度的 Scrapyd 任务,node_name 就是主机的名称
addversion.json
这个接口主要是用来部署 Scrapy 项目用的,在部署的时候我们需要首先将项目打包成 Egg 文件,然后传入项目名称和部署版本
curl hhttp://107.174.101.162:6800/addversion.json -F project=sun -F version=first -F [email protected]
在这里 -F 即代表添加一个参数,同时我们还需要将项目打包成 Egg 文件放到本地
返回:
{"status": "ok", "spiders": 3}
schedule.json
这个接口负责调度已部署好的 Scrapy 项目运行
curl http://107.174.101.162:6800/schedule.json -d project=sun -d spider=sunspider
在这里需要传入两个参数,project 即 Scrapy 项目名称,spider 即 Spider 名称。
{"status": "ok", "jobid": "6487ec79947edab326d6db28a2d86511e8247444"}
status 代表 Scrapy 项目启动情况,jobid 代表当前正在运行的爬取任务代号。
cancel.json
这个接口可以用来取消某个爬取任务,如果这个任务是 pending 状态,那么它将会被移除,如果这个任务是 running 状态,那么它将会被终止。
curl http://107.174.101.162:6800/cancel.json -d project=sun -d job=a720e824232b11eabed400163c78452c6487ec79947edab326d6db28a2d86511e8247444
在这里需要传入两个参数,project 即项目名称,job 即爬取任务代号。
{"status": "ok", "prevstate": "running"}
status 代表请求执行情况,prevstate 代表之前的运行状态。
listprojects.json
这个接口用来列出部署到 Scrapyd 服务上的所有项目描述。
我们可以用下面的命令来获取 Scrapyd 服务器上的所有项目描述:
curl http://107.174.101.162:6800/listprojects.json
{"status": "ok", "projects": ["sun"], "node_name": "CorruptPositive-VM"}
listversions.json
这个接口用来获取某个项目的所有版本号,版本号是按序排列的,最后一个条目是最新的版本号。
我们可以用如下命令来获取项目的版本号:
curl http://107.174.101.162:6800/listversions.json?project=sun
{"status": "ok", "versions": ["1576844155"], "node_name": "CorruptPositive-VM"}
listspiders.json
这个接口用来获取某个项目最新的一个版本的所有 Spider 名称。
我们可以用如下命令来获取项目的 Spider 名称:
curl http://107.174.101.162:6800/listspiders.json?project=sun
{"status": "ok", "spiders": ["sunspider"], "node_name": "CorruptPositive-VM"}
listjobs.json
这个接口用来获取某个项目当前运行的所有任务详情。
curl http://107.174.101.162:6800/listjobs.json?project=sun
{"pending": [], "status": "ok", "running": [], "finished": [], "node_name": "CorruptPositive-VM"}
delversion.json
这个接口用来删除项目的某个版本。
curl http://107.174.101.162:6800/delversion.json -d project=sun -d version=v1
在这里需要一个参数 project,就是项目的名称,还需要一个参数 version,就是项目的版本。