scrapyd是运行scrapy爬虫的服务程序, 它支持以http命令方式发布、删除、启动、停止爬虫程序。而且scrapyd可以同时管理多个爬虫, 每个爬虫还可以有多个版本.
特点:
windows: pip install scrapyd
组件需安装: pip install scrapyd-client
(scrapyd-client提供scrapyd-deploy工具用于发布爬虫)
ubuntu: apt-get install scrapyd
组件需安装: pip3 install scrapyd-client
在终端下使用运行: scrapyd # 运行后, 可以在browser中访问http://localhost:6800.
browser上是scrapyd提供的web界面, 可以查看运行spider的情况和日志.
scrapyd默认port为6800.
发布爬虫信息:
# 1.先设置scrapy项目中的scrapy.cfg文件
# 找到scrapy.cfg中的这 3 行.修改并保存.
[deploy:100] # 这里加了 :100 表示将spider发布到名为100的服务器上.
url = http://localhost:6800/ # 这里去掉注释, url就是scrapyd的默认web地址.
project = longzhu # 这里为项目名, 可以自己写.
# 2.在终端中发布spider(这里用到scrapyd-client的工具), 需要先启动scrapyd.
# scrapyd-deploy -p --version
# target为scrapy.cfg中deploy后的100, project为project名, version可自定义.下面为eg.
scrapyd-deploy 100 -p longzhu --version 8_9_12_15
# 发布后, 可以在scrapyd的web界面中看到相应的project名.
# Available project: longzhu defailut
运行scrapyd后, 在终端中运行spider: curl http://localhost:6800/schedule.json -d project=myproject -d spider=spidername
http://localhost:6800/schedule.json
是scrapyd提供使用的API之一.
scrapyd中有10个API供我们使用, 详情可查看官方文档:
API的使用都是通过http协议发送请求.使用API返回为json格式的数据.
参数使用还是比较直观, 详细的参数介绍可以查看官方文档.
检查服务的负载状态(daemonstatus.json), GET
# request
curl http://localhost:6800/daemonstatus.json
# response
{ "status": "ok", "running": "0", "pending": "0", "finished": "0", "node_name": "node-name" }
增加项目的新版本到服务器, 如果项目不存在则创建 (addversion.json) , POST
# 参数: project 为项目名, version为项目版本名, egg为包含项目代码的egg文件
# request
curl http://localhost:6800/addversion.json -F project=myproject -F version=r23 -F [email protected]
# response
{"status": "ok", "spiders": 3}
运行指定的spider**(schedule.json)**,POST
# 参数: project, spider, setting, jobid, _version, 其他额外的参数都会放入到spider的参数中.
# request
curl http://localhost:6800/schedule.json -d project=myproject -d spider=somespider
# response
{"status": "ok", "jobid": "6487ec79947edab326d6db28a2d86511e8247444"}
取消任务的执行或删除, 如果指定任务处于运行状态则会被终止, 如果处于待处理状态则被删除(cancel.json), POST
# args: project, job.
# request
curl http://localhost:6800/cancel.json -d project=myproject -d job=6487ec79947edab326d6db28a2d86511e8247444
# response
{"status": "ok", "prevstate": "running"}
获取scrapyd服务器的项目列表(listprojects.json), GET
# request
curl http://localhost:6800/listprojects.json
# response
{"status": "ok", "projects": ["myproject", "otherproject"]}
获取指定项目可用的版本列表(listversions.json), GET
# args: project.
# request
curl http://localhost:6800/listversions.json?project=myproject
# response
{"status": "ok", "versions": ["r99", "r156"]}
获取某个项目指定的或者默认最新的一个版本的spider列表(listspiders.json), GET
# args: project, _version.
# request
curl http://localhost:6800/listspiders.json?project=myproject
# response
{"status": "ok", "spiders": ["spider1", "spider2", "spider3"]}
获取指定项目的待处理, 正在运行和已完成的任务列表(listjobs.json), GET
# args: project
# request
curl http://localhost:6800/listjobs.json?project=myproject
# response
{"status": "ok",
"pending": [{"id": "78391cc0fcaf11e1b0090800272a6d06", "spider": "spider1"}],
"running": [{"id": "422e608f9f28cef127b3d5ef93fe9399", "spider": "spider2", "start_time": "2012-09-12 10:14:03.594664"}],
"finished": [{"id": "2f16646cfcaf11e1b0090800272a6d06", "spider": "spider3", "start_time": "2012-09-12 10:14:03.594664", "end_time": "2012-09-12 10:24:03.594664"}]}
删除项目的版本, 如果项目只有一个版本那么项目本身也会被删除(delversion.json), POST
# args: project, version
# request
curl http://localhost:6800/delversion.json -d project=myproject -d version=r99
# response
{"status": "ok"}
删除项目及其所有在服务器上的版本(delproject.json), POST
# args: project
# request
curl http://localhost:6800/delproject.json -d project=myproject
# response
{"status": "ok"}