scrapyd的使用

 scrapyd部署爬虫的优势:
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.jsonpost方式,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)


















  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值