python#使用scrapyd服务的方法与步骤
什么是scrapyd
scrapyd = scrapy + deploying
把scrapy程序发布到上面的一套由python写好的服务
Scrapyd is an application for deploying and running Scrapy spiders.
It enables you to deploy (upload) your projects and control their spiders
using a JSON API.
言外之意: scrapyd
是一种服务,它能跟scrapy
开发的爬虫程序配套使用的,其可以
通过发布scrapy
程序并通过一套post
/get
请求指令(查看)来控制发布到
scrapyd
服务上的scrapy
程序。
步骤
1. 准备工作 前期准备1
a) 安装scrapyd
安装好scrapyd,先开启服务,
#安装好scrapyd
$ pip install scrapyd
#开启服务 默认都不需要加载
$ scrapyd
最后一步在所在的当前指令目录中会出现空dbs、eggs、logs
文件,顾名思义这三个文件是
后期部署scrapy
爬虫项目的管理以及记录日志的地方,所以初步可以看到scrapyd
是一个
容器,或者更准确点就是需要在后台开起来的服务,以下本人称scrapyd
为scrapyd服务
以
区分scrapy
项目
b) 安装scrapyd-client
这是一个部署scrapy
到scrapyd服务
中的工具,
$ pip install scrapyd-client
该安装包拥有scrapyd-deploy 命令,是爬虫项目发布到srcapyd服务
的关键步骤,使用的前提是
必须要开启scrapyd
服务,也就是第一步a)
这一步window需要额外处理,linux不需要
2. 发布scrapy项目
到scrapyd服务
前期准备2
a) 创建爬虫的通常命令
$ scrapy startproject sipdername
进入爬虫的项目顶级目录(之后操作都在该级目录中),在指令所在目录下会自动创建爬虫项目模板,
同时会在顶层目录中生成一个scrapy.cfg配置,这个配置本来如果你不发布项目的话,基本上可以忽略。
该配置是发布爬虫项目到scrapyd服务
的重要配置。
b) 修改scrapy.cfg内容
注释掉scrapy.cfg文件中的url(默认端口6800) 以及 [desploy:scrapyd部署项目名]
c) 查看服务以及项目是否正常
- 1.查看是否可以发布到
scrapyd服务
$ scrapyd-deploy -l
正常情况下会显示部署在`scrapyd服务`上的爬虫项目,如果出错,最大的可能性就是没有开启`scrapyd
服务`,因为可以在任何目录中开启`scrapyd服务`,所以该指令是用来查找当前正在开启的`scrapyd服务`
的
- 2.查看scrapy爬虫项目中的爬虫名
$ scrapy list
正常情况下会列出当前你的爬虫项目,如果列不出来或者报错,你先看下是哪里语法有问题。
3. 正式发布项目
以上2步骤都没有问题
的话,就开始部署项目(部署这里不需要关注爬虫名)
$ scrapyd-deploy 部署项目名(cfg:中的部署项目名) -p 爬虫项目名
说明
:
部署项目名
: 是指配置中的项目名称看 2.b) 你自己设置的名称,是scrapyd识别不同部署项目的名称
项目名
: 这个是scrapy生成的项目名,也就是你的顶级项目目录名称
部署成功之后会在scrapy项目中生成两个文件build和project.egg-info,分别是通过scrapyd-deploy
命令生成的编译文件以及一些项目配置信息
4.大功告成
通过ip地址:6800端口进入看服务,这里特别说明,一切运行都需要先开启scrapyd服务
htt://ip地址:6800 访问
5.一些scrapyd控制爬虫的指令方法
可以通过 curl命令获取6800相关的api接口对爬虫进行远程操作,比如开启爬虫
,停止爬虫
等等
1)开启
:项目名为爬虫的顶级项目名,非上面的部署名
curl http://ip地址:6800/schedule.json -d project=项目名 -d spider=爬虫名称
b)关闭
,job可以通过6800看
curl http://ip地址:6800/cancel.json -d project=项目名 -d job=232424434
c)删除
不要的项目,确保该项目没有运行的爬虫
curl http://ip地址:6800/delproject.json -d project=项目名
d)查看
还有多少项目
curl http://ip地址:6800/listprojects.json
6.其他思考
以上可以看到通过curl命令就是获取接口命令的方法,那么我们很容易通过python中的
requests包来发送请求,来执行认为,这个方法可以集成到django这样的项目下做定时任务
1