Scrapyd部署scrapy爬虫

首先,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,就是项目的版本。

delproject.json
这个接口用来删除某个项目。
curl http://107.174.101.162:6800/delproject.json -d project=sun
 

上一篇:项目部署之virtualenv的使用

下一篇:Mysql 的sql_Mode