1、方便监控爬虫的实时运行状态,也可以通过接口调用开发自己的监控爬虫的页面
2、方便统一管理,可以同时启动或关闭多个爬虫
3、拥有版本控制,如果爬虫出现了不可逆的错误,可以通过接口恢复到之前的任意版本
pip install scrapyd
安装完成之后启动即可,即在cmd中输入scrapyd
这个时候在浏览器输入127.0.0.1:6800 就能查看了 运行没问题之后先关闭
(在任意盘中新建一个文件夹,打开这个文件夹shift+右键 打开命令行工具,会新建一个dbs空文件夹这个文件夹用来存放爬虫项目的数据)
第二步,还是安装
pip installl scrapyd-client(客户端的意思)
(scrapyd-client模块是专门用来打包scrapy项目的,安装完成后会在scripts中出现一个scrapyd-deploy无后缀文件,这个scrapyd-deploy(部署的意思)文件是启动文件,在Linux系统下可以运行,在Windows下是不能运行的,所以我们需要编辑一下,使他在Windows可以运行
新建一个scrapyd-deploy.bat文件,右键选择编辑,输入以下配置,注意:两个路径之间是空格,一定要使用双引号。单引号的话会错误。
@echo off
"python.exe的路径" "scrapyd-deploy的路径" %1 %2 %3 %4 %5 %6 %7 %8 %9)
3.进入虚拟环境,进入项目中,执行scrapyd-deploy,测试是否可以运行,如果出现以下则正常
4.打开爬虫项目中的scrapy.cfg文件,这个文件就是scrapyd-deploy使用的,将url这行代码解注释,并设置自己的部署名称
这个时候执行scrapyd-deploy -l,可以看到设置的名称,执行scrapy list,如果能成功看到爬虫名,说明成功了
(
注意执行 scrapy list 命令的时候很有可能出现错误,如果是python无法找到scrapy项目,需要在scrapy项目里的settings.py配置文件里设置成python可识别路径
# 将当前项目的一级目录TotalSpider目录添加到python可以识别目录中
BASE_DIR = os.path.dirname(os.path.abspath(os.path.dirname(__file__)))
sys.path.insert(0, os.path.join(BASE_DIR, “TotalSpider”))
如果错误提示,什么远程计算机拒绝,说明你的scrapy项目有链接远程计算机,如链接数据库或者elasticsearch(搜索引擎)之类的,需要先将链接服务器启动
执行 scrapy list 命令返回了爬虫名称说明一切ok了,如下图
)
5.执行打包命令: scrapyd-deploy 部署名称 -p 项目名称
如:scrapyd-deploy wj -p TotalSpider
6.运行爬虫的命令是
curl http://localhost:6800/schedule.json -d project=项目名称 -d spider=爬虫名称
这个是成功之后的,可以在127.0.0.1:6800上查看
----------------------------分割线------------------------------------------------------
停止爬虫
curl http://localhost:6800/cancel.json -d project=scrapy项目名称 -d job=运行ID
删除scrapy项目
注意:一般删除scrapy项目,需要先执行命令停止项目下在远行的爬虫
curl http://localhost:6800/delproject.json -d project=scrapy项目名称
查看有多少个scrapy项目在api中
curl http://localhost:6800/listprojects.json
查看指定的scrapy项目中有多少个爬虫
curl http://localhost:6800/listspiders.json?project=scrapy项目名称
总结几个请求url
1、获取状态
http://127.0.0.1:6800/daemonstatus.json
2、获取项目列表
http://127.0.0.1:6800/listprojects.json
3、获取项目下已发布的爬虫列表
http://127.0.0.1:6800/listspiders.json?project=myproject
4、获取项目下已发布的爬虫版本列表
http://127.0.0.1:6800/listversions.json?project=myproject
5、获取爬虫运行状态
http://127.0.0.1:6800/listjobs.json?project=myproject
6、启动服务器上某一爬虫(必须是已发布到服务器的爬虫)
http://127.0.0.1:6800/schedule.json (post方式,data={"project":myproject,"spider":myspider})
7、删除某一版本爬虫
http://127.0.0.1:6800/delversion.json
(post方式,data={"project":myproject,"version":myversion})
8、删除某一工程,包括该工程下的各版本爬虫
http://127.0.0.1:6800/delproject.json(post方式,data={"project":myproject})
# -*- coding:utf-8 -*-
import requests
# 获取服务器状态的请求
response = requests.get('http://localhost:6800/daemonstatus.json')
# 将json数据转换python对象
rs = response.json()
if rs.get('status') == 'ok':
running = rs.get('running')
pending = rs.get('pending')
finished = rs.get('finished')
print('爬虫状态:ok 正在运行{}个爬虫 待定状态{}个爬虫 已经结束{}个爬虫'.format(running,pending,finished))
# 调度爬虫执行
# response = requests.post(
# url='http://localhost:6800/schedule.json',
# data={
# 'project':'JobsSpider',
# 'spider':'jobs'
# }
# )
# 返回的也是json
# rs = response.json()
# if rs.get('status') == 'ok':
# jobid = rs.get('jobid')
# 取消爬虫,根据jobid和项目名称取消爬虫
# print(jobid)
# response = requests.post(
# url='http://localhost:6800/cancel.json',
# data={
# 'project':'JobsSpider',
# 'job':jobid
# }
# )
# print(response.text)
# 获取所有的项目名
# 让所有的爬虫同时启动
response = requests.get('http://localhost:6800/listprojects.json')
rs = response.json()
if rs.get('status') == 'ok':
prjects = rs.get('projects')
# 获取所有的项目名
for pro_name in prjects:
# 根据项目名 获取项目下的爬虫
url = 'http://localhost:6800/listspiders.json?project='+pro_name
rs = requests.get(url).json()
if rs.get('status') == 'ok':
spiders = rs.get('spiders')
# 获取项目下的爬虫名
for spd_name in spiders:
# 发送post请求,启动爬虫
response = requests.post(
url='http://localhost:6800/schedule.json',
data={
'project':pro_name,
'spider':spd_name
}
)
print(response.text)