scrapyd:基于scrapy的爬虫发布管理工具
来源:互联网 发布:电商erp系统源码 编辑:程序博客网 时间:2024/06/07 01:40
最近研究scrapy爬虫框架,在整站爬取上及其方便。但是因为boss的需求比较怪异,需要自动化的最大量不同站点做爬取,而scrapy实现上述功能又不够智能和方便。后来在scrapy文档里发现了scrapyd,找到了思路。
scrapyd相当于scrapy server,可以同时运行多个爬虫。
1、安装scrapyd:
pip install scrapyd
2、运行scrapyd:
scrapyd
运行结果如下:
XXXX:~$ scrapyd2017-07-11T10:11:48+0800 [-] Loading /home/dbj/anaconda3/lib/python3.5/site-packages/scrapyd/txapp.py...2017-07-11T10:11:48+0800 [-] Scrapyd web console available at http://127.0.0.1:6800/2017-07-11T10:11:48+0800 [-] Loaded.2017-07-11T10:11:48+0800 [twisted.scripts._twistd_unix.UnixAppLogger#info] twistd 16.6.0 (/home/dbj/anaconda3/bin/python 3.5.2) starting up.2017-07-11T10:11:48+0800 [twisted.scripts._twistd_unix.UnixAppLogger#info] reactor class: twisted.internet.epollreactor.EPollReactor.2017-07-11T10:11:48+0800 [-] Site starting on 68002017-07-11T10:11:48+0800 [twisted.web.server.Site#info] Starting factory <twisted.web.server.Site object at 0x7fd27e5895c0>2017-07-11T10:11:48+0800 [Launcher] Scrapyd 1.2.0 started: max_proc=8, runner='scrapyd.runner'
访问地址:http://localhost:6800/
3、scrapyd的API:
daemonstatus.json:
作用:检查服务的负载状态。
用法:支持http的GET请求,无需参数。
请求示例:
curl http://localhost:6800/daemonstatus.json
响应示例:
{ “status” : “ok” , “running” : “0” , “pending” : “0” , “finished” : “0” , “node_name” : “node-name” }
addversion.json:
作用:向项目添加版本,如果项目不存在则创建该项目,默认情况下会使用项目的最新版本。
用法:支持http的POST请求。
参数:
- peoject(string,required(必选)):项目名称
- version(string,required):项目版本
- egg(file,required)): 包含项目代码的Python egg文件
请求示例:
curl http://localhost:6800/addversion.json -F project=myproject -F version=r23 -F egg=@myproject.egg
响应示例:
{"status": "ok", "spiders": 3}
schedule.json
作用:运行一个爬虫任务,并返回任务ID。。
用法:支持http的POST请求。
参数:
- peoject(string,required):项目名称
- spider(string,required):爬虫名称
- setting(string,optional(可选)):运行爬虫时可进行的scrapy设置
- jobid(string,optional):用户标识任务的任务ID,覆盖默认生成的UUID。
- _version(string,optional):要使用的项目版本
- 任何其他参数都可作为爬虫参数传递
请求示例:
curl http:// localhost:6800 / schedule.json -d project = myproject -d spider = somespider
响应示例:
{ “status” : “ok” , “jobid” : “6487ec79947edab326d6db28a2d86511e8247444” }
传递蜘蛛参数(arg1)和设置(DOWNLOAD_DELAY)的示例请求:
curl http://localhost:6800/schedule.json -d project=myproject -d spider=somespider -d setting=DOWNLOAD_DELAY=2 -d arg1=val1
cancel.json
作用:取消爬虫的运行。如果爬虫任务正在等待,则移除任务。如果任务在运行,则中断任务。
用法:支持http的POST请求。
参数:
- project(string,required):项目名称
- job(string,required):任务id
请求示例:
curl http://localhost:6800/cancel.json -d project=myproject -d job=6487ec79947edab326d6db28a2d86511e8247444
响应示例:
{"status": "ok", "prevstate": "running"}
listprojects.json:
作用:获取上传到当前scrapy server的项目列表
用法:支持http的GET请求。
请求示例:
curl http://localhost:6800/listprojects.json
响应示例:
{"status": "ok", "projects": ["myproject", "otherproject"]}
listversions.json:
作用:获取可用于某些项目的版本列表。版本按顺序返回,最后一个是当前使用的版本。
用法:支持http的POST请求。
参数:
- project(string,required):项目名称
请求示例:
curl http://localhost:6800/listversions.json?project=myproject
响应示例:
{"status": "ok", "versions": ["r99", "r156"]}
listspiders.json:
作用:获取某些项目最新版本(除非被覆盖)中的可用爬虫列表。
用法:支持http的GET请求。
参数:
- project(string,required):项目名称
- _version(string,optional):要检查的项目版本
请求示例:
curl http://localhost:6800/listspiders.json?project=myproject
响应示例:
curl http://localhost:6800/listspiders.json?project=myproject
listjobs.json:
作用:获取项目的待处理,运行和完成任务的列表。
用法:支持http的GET请求。
参数:
- project(string,required):项目名称
请求示例:
curl http:// localhost:6800 / listjobs.json?project = myproject
响应示例:
{ “status” : “ok” , “pending” : [{ “id” : “78391cc0fcaf11e1b0090800272a6d06” , “spider” : “spider1” }], “running” : [{ “id” : “422e608f9f28cef127b3d5ef93fe9399” , “spider” : “spider2” , “start_time” : “2012-09-12 10:14:03.594664” }], “完成” : [{ “id” : “2f16646cfcaf11e1b0090800272a6d06”, “spider” : “spider3” , “start_time” : “2012-09-12 10:14:03.594664” , “end_time” : “2012-09-12 10:24:03.594664” }]}
delversion.json
作用:删除项目版本。如果给定项目没有可用的版本,该项目也将被删除。
用法:支持http的POST请求。
参数:
- project(string,required):项目名称
- version(string,optional):项目版本
请求示例:
curl http://localhost:6800/delversion.json -d project=myproject -d version=r99
响应示例:
{"status": "ok"}
delproject.json
作用:删除项目及其上传的所有版本。
用法:支持http的POST请求。
参数:
- project(string,required):项目名称
请求示例:
curl http://localhost:6800/delproject.json -d project=myproject
响应示例:
{"status": "ok"}
4、部署项目:
部署项目可以到通过addversion.json节点将egg文件上传到Scrapyd 。可以手动执行此操作,但最简单的方法是使用scrapyd-client提供的scrapyd-deploy工具,可以帮你完成所有操作。
4.1、安装scrapyd-client
pip install Scrapyd-client
4.2、使用方法:
1)拷贝scrapyd-deploy工具到爬虫项目根目录下 。scrapyd-deploy工具位于你的python目录下的site-packages/scrapyd-client路径中。
2)修改爬虫项目的scapy.cfg文件。
首先,去掉url前的注释符号#,这里的url就是你的scrapyd服务器的网址。
其次,deploy:110表示把爬虫发布到名为110的爬虫服务器上。
这个deploy名叫target,可以随意起,一般情况用在需要同时发布爬虫到多个目标服务器时,可以通过指定名字的方式发布到指定服务器。
其次,default=ccpmess.settings 中 ccpmess也是可以改的,貌似没啥用,默认还是用工程名字。
关键是scrapyd-deploy 所在目录,具体其实可以读下scrapyd-deploy 的代码。
# Automatically created by: scrapy startproject## For more information about the [deploy] section see:# https://scrapyd.readthedocs.org/en/latest/deploy.html[settings]default = SiteSpider.settings[deploy:110]url = http://127.0.0.1:6800/project = ccpmess[deploy:119]url = http://128.0.0.1:6800/project = ccpmess
3)查看配置
检查scrapy配置是否正确。
$ python scrapyd-deploy -l127 http://127.0.0.1:6800/141 http://138.0.0.141:6800/
4)发布爬虫:
scrapyd-deploy <target> -p <project> --version <version>
target就是前面配置文件里deploy后面的的target名字。
project 可以随意定义,跟爬虫的工程名字无关。
version自定义版本号,不写的话默认为当前时间戳。
运行结果”
$python scrapyd-deploy 110 -p SiteSpider --version ver20170711Packing version ver20170711Deploying to project "SiteSpider" in http://127.0.0.1:6800/addversion.jsonServer response (200):{"project": "SiteSpider", "spiders": 1, "node_name": "dbj-virtual-machine", "status": "ok", "version": "ver20170711"}
5、运行爬虫:
至此,整个scrapyd环境已经配置完成,爬虫也上传完毕,接下来就是调用爬虫。
首先,查询当前的项目状态:
curl http://localhost:6800/listprojects.json得到结果:
{"projects": ["SiteSpider"], "node_name": "dbj-virtual-machine", "status": "ok"}
查询项目中可用爬虫:
{"spiders": ["site"], "node_name": "dbj-virtual-machine", "status": "ok"}
然后,运行爬虫:
curl http://localhost:6800/schedule.json -d project=SiteSpider -d spider=site运行结果:
{"node_name": "dbj-virtual-machine", "status": "ok", "jobid": "ea7ae23c66ae11e791a6000c2921e83f"}
可以看到,爬虫已经开始运行。
PS:
1、爬虫开始运行后,可以通过api查询运行状态,也可以直接在可以在http://localhost:6800页面的jobs下查看任务运行状态。
2、若爬取结果以文件形式落地,那默认的当前目录为scrapyd指令运行时所在的目录。
3、运行爬虫时,也可传入爬虫所需的参数,跟在对应链接最后,每个参数前都要加上参数-a。
- scrapyd:基于scrapy的爬虫发布管理工具
- 基于scrapyd爬虫发布总结
- 基于Scrapyd的爬虫部署
- 利用scrapyd管理scrapy的多个爬虫
- 基于scrapy的小爬虫
- 基于scrapy的简单爬虫
- scrapy和scrapyd-client的使用教程
- Scrapy——scrapyd的使用
- scrapyd部署爬虫遇到的问题
- python scrapy部署scrapyd
- windows 7 使用 scrapyd 监控 scrapy的 spider
- 用python3写的scrapy代码,如何部署到scrapyd
- centos系统下通过scrapyd部署python的scrapy
- Scrapyd部署爬虫
- Scrapyd部署爬虫项目
- 使用Scrapyd部署爬虫
- Scrapyd部署爬虫
- 基于Scrapy框架下的Python网络爬虫的实现
- 自定义考勤统计日历(二)
- App后台开发运维和架构实践学习总结(8)——后台产品设计的4个原则
- STM32F1战舰的II2C-正点原子的个人梳理(1)
- js笔记
- Elasticsearch 5.5.0及 head插件安装指南
- scrapyd:基于scrapy的爬虫发布管理工具
- QWidget的几何结构
- 设置ALV单元格可编辑状态
- POJ 3608 Bridge Across Islandsc(求解两凸包最小距离)
- 转 内存问题排查
- tomcat服务器报 java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method n
- scheduler实现注解形式进行任务扫描
- IE 下js里面new Date("2017-07-11 08:00:00") 出现NAN的问题以及解决方法
- 关于UGUI自动设置锚点到控件四个角的问题