是什么?
- scrapyd是scrapy官方提供的爬虫管理工具
- 我们可以从任何一台能连接到服务器的pc发送请求来操控爬虫
- 运行爬虫
- 停止正在运行的爬虫
- 上传新的爬虫
- 版本控制功能
scrapyd的使用:
- 安装 :pip install scrapyd
- ubantu上安装请直接使用 sudo apt-get install scrapyd
- 运行 : scrapyd
- 默认监听 0.0.0.0:6800 端口, 运行scrapyd之后, 在浏览器输入localhost:6800 即可查看当前运行的项目
工程的部署
要将项目完整的部署到服务器上,需要通过scrapyd的addversion.json服务将ptyhon编译成egg文件并上传到服务器
我们可以以手动的方式将文件上传到服务器
可以通过scrapyd-deploy软件包中附带的scrapyd-client客户端来完成这项工作
restful api
- 如何调用api?
- 任何能发送http请求的工具 如urllib, requests, curl
- curl http://localhost:6800/api名称.json
- 检查scrayd的运行状态
- daemonstatus.json get
- 向scrapyd增加一个项目版本,如果项目不存在,则自动创建一个项目
- addversion.json post
- 加载运行指定的蜘蛛
- schedule.json post
- 终止蜘蛛的作业
- cancel.json post
- 获取当前的scrapy服务器中所有的已上传的项目列表
- listprojects.json get
- 获取项目中可用的版本列表,版本会按顺序排列,最后一个为当前正在使用的版本
- listversions.json get
- 获取当前版本中可用的蜘蛛
- listspiders.json get
- 获取项目中待定,正在运行,或者已完成的作业列表
- listjobs.json get
- 删除项目中指定的版本
- delversion.json post
- 删除指定项目及其所有已上传的版本
- delproject.json post
- curl http://localhost:6800/delproject.json -d project=项目名称
版本管理api
- curl http://localhost:6800/listversions.json?project=myproject
- 获取项目中的版本列表,版本会按照顺序排列,最后一个为当前正在使用的版本
- curl http://localhost:6800/addversion.json -F project=myproject -F version=r23 -F egg=@myproject.egg
- 添加项目
- project : 项目名
- version : 版本
- egg : python项目的egg文件
- curl http://localhost:6800/delversion.json -d project=myproject -d bersion=r99
- 删除项目中指定的版本
- project : 项目名
- version : 版本号
作业管理api
- curl http://localhost:6800/listspiders.json?project=tutorial_deploy
- 获取当前版本中可用的蜘蛛列表
- curl http://localhost:6800/listjobs.json?project=myproject
- 获取项目中待定,正在运行或已完成的作业列表
- curl http://localhost:6800/cancel.json -d project=tutorial -d job='xxxxxxxxx'
- 终止蜘蛛的作业
- project : 项目名称
- job : 作业编号
- curl http://localhost:6800/schedule.json -d project=tutorial -d spider=tencent
- project : 项目名称,必选
- spide : 蜘蛛名称,必选
scrapyd-client及部署
是什么?
scrapyd-client 是 scrayd的一个客户端工具,它提供了一系列的指令工具以简化scrapyd那些冗长的http指令请求,另外它还搭载了scrapyd-deploy部署工具,可以将开发环境中的代码部署到远程scrapyd服务器中
安装:
默认安装:
pip install scrapyd-client
scrapyd-client的官方版本在安装完成后是没有scrapyd-client指令的, 启用这个指令需要安装master bunch上的版本
// pip3 install --upgrade git+ssh://git@github.com/scrapy/scrapyd-client.git
tips: 有个坑: 我执行上边的语句安装包一只报错,最后选择去github上下载上边的包,本地安装
安装方式:
解压下载好的zip包
打开终端, cd到这个包内
执行python setup.py install
在我的电脑上会报错,提示需要pyasn1这个包
修改包文件夹下的requirements , 最下面一行添加一句 pyasn1, 再次执行 python setup.py install
指令语法
- scrapyd-client projects 列出默认服务器上的所有项目
- scrapyd-client -t http://xxx projects 从指定服务器地址上列出所有项目
- scrapyd-client schedule 启动任意的蜘蛛
- scrapyd-client schedule -p sina * 启动指定项目sina中的所有蜘蛛
- scrapyd-client schedule -p * *_daily 支持通配符,启动所有以_daily结尾的项目中的蜘蛛
- scrapyd-client spiders 列出所有的蜘蛛
- scrapyd-client spiders -p sina 列出指定项目sina下的蜘蛛
由于scrapyd-client deploy这个指令是最长用的,因此scrapyd-client提供了scrapyd-deploy命令
部署scrapyd项目
部署项目分为两步
- 将当前项目的egg信息发布到服务器中,需要在当前项目下安装setuptools以支持此操作
- 通过调用addversion.jsonAPI将egg上传到scrapyd服务器
scrapyd-deploy可以自动完成以上两个步骤
- cd 到项目根目录
- 修改一下scrapy.cfg 文件
-
[settings] default = jobSpider51job.settings // 给deploy起个名字, [deploy:job] url = http://localhost:6800/ project = jobSpider51job Username = zhangjian
- scrapyd-deploy job -p jobSpider51job
- 又遇到一个坑: 这个东西在项目下帮我生成了egg文件, 但是运行上面语句提示我在 /var/xx 的一个文件夹下找不到egg文件
- 不知道如何解决, 暂时先将egg生成文件的路径修改成 /var/xx
-
cd /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/scrapyd/ vim default_scrapyd.conf
default_scrapyd.conf 文件内容 eggs_dir = /var/folders/zq/9x6mmvl904vf4w_373f_vs7h0000gn/T/ logs_dir = logs items_dir = jobs_to_keep = 5 dbs_dir = dbs max_proc = 0 max_proc_per_cpu = 4 finished_to_keep = 100 poll_interval = 5.0 bind_address = 127.0.0.1 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
项目部署实战
step1
- 新建一个文件夹作为,如scrapydtest作为scrapyd管理的目录
- 在该文件夹下打开终端 输入scrapyd
step2
- 准备好爬虫项目pro1
- 修改爬虫项目scrapy.cfg文件
-
[deploy:bd] // 给deploy起个名字 url = http://localhost:6800/ //将url注释解开 project = pro1 //这是你的项目名字,不用修改
- 在项目下文件夹下打开终端 输入scrapy list, 如果出现爬虫名则证明ok
- scrapyd-deploy bd(你给deploy起的名字) -p pro1(项目名) , 如果成功则你的爬虫项目已经提交到远端了
- 查看已经提交的项目 curl http://localhost:6800/listprojects.json
- 查看某项目已经存在的版本 curl http://localhost:6800/listversions.json?project=pro1
- 查看某项目当前版本中可用的蜘蛛 curl http://localhost:6800/listspiders.json?project=pro1
- 运行刚才提交的爬虫 curl http://localhost:6800/schedule.json -d project=pro1 -d spider=baidu
- 获取项目中待定,运行,完成的蜘蛛 curl http://localhost:6800/listjobs.json?project=pro1
- 终止蜘蛛的作业 curl http://localhost:6800/cancel.json -d project=pro1 -d job=faba9f6e014011eabf88a0510bfb3f24
- job后边的编号是刚才 listjob中看到的作业编号
- 在项目中新生成一个蜘蛛, 然后重新提交项目 scrapyd-deploy bd -p pro2
- listspiders会发现项目中已经有两个蜘蛛了
step3
准备好爬虫项目pro2
重复上述操作
完成上述操作后:
查看我们最开始创建好的scrapydtest文件夹,会发现文件夹中有三个文件夹,一个文件
- dbs
- pro1.db
- pro2.db
- eggs
- pro1/{多个egg文件,每提交的一个版本对应一个egg文件}
- pro2/{多个egg文件,每提交的一个版本对应一个egg文件}
- logs
- pro1(项目)
- baidu (爬虫)
- xxx.log 每运行一次都会保存一个log信息
- baidu1(爬虫)
- xxxx.log
- baidu (爬虫)
- pro1(项目)