pip install scrapyd
scrapyd原理
当在一个服务器上安装并运行scrapyd的时候,scrapyd会以守护进程的形式来监听爬虫的运行和请求,然后启动进程来执行爬虫程序
scrapyd也提供了web的接口。方便我们查看和管理爬虫程序。默认情况下scrapyd监听6800端口,运行scrapyd后。在本机上使用浏览器访问http://localhost:6800地址即可查看到当前可以运行的项目
项目部署
使用scrapyd-client提供的scraoyd-deploy工具进行部署
原理
scrapyd是运行在服务器端,而scrapyd-client是运行在客户端。客户端使用scrapyd-client通过调用scrapyd的json接口来部署爬虫项目
pip install scrapyd-client
配置项目的服务器信息
修改工程目录下的scrapy.cfg文件
如果你的服务器上有配置HTTP basic authentication验证的话,那么还需要配置用户名和密码用来登录服务器
# Automatically created by: scrapy startproject # # For more information about the [deploy] section see: # https://scrapyd.readthedocs.io/en/latest/deploy.html [settings] default = toutiao.settings [deploy:server] # 为服务器指定的一个名字,这里我指定为server #url = http://localhost:6800/ # 部署项目的服务器地址,现在把项目部署到本地,如果部署到其他机器上就需要更改ip project = toutiao # toutiao为工程名 username='' password = ''
部署爬虫程序
在爬虫根目录下运行一下命令
scrapyd-deploy -p
target为上一步在配置文件中配置的服务器名称,project为项目名称,以当前爬虫为例,执行以下命令:
scrapyd-deploy server -p toutiao
部署操作会打包你的当前项目,如果当前项目下有setup.py文件,就会使用它当中的配置,没有就会自动创建一个(如果后期项目需要打包的话,可以根据自己的需要修改里面的信息 ,也可以暂时不管他)从返回的结果里面,我们可以看到部署的状态,项目名称,版本号和爬虫个数,以及当前的主机名称
运行结果如下:
使用一下命令查看部署结果:
scrapyd-deploy -L 服务器名称 eg: scrapyd-deploy -L server toutiao default
刷新http://localhost:6800页面,也可以看到Available projects:toutiao,default的字样
使用API管理爬虫
scrapyd的web界面比较简单,主要用于监控,所有的调度工作全部依靠接口实现。官方推荐使用curl来管理爬虫
安装curl
开启爬虫schedule
在项目根目录下运行一下命令来开启爬虫
取消爬虫
列出项目
列出爬虫、版本、job信息
删除爬虫项目
检查服务器的负载状态daemonstatus.json
# 实力请求
curl http :// localhost :6800 / daemonstatus.json
# 响应示例
{ “status” : “ok” , “running” : “0” , “pending” : “0” , “finished” : “0” , “node_name” : “node-name” }
addversion.json
讲项目添加到项目中,如果不存在则会自动创建项目
支持的请求方法:get
参数:
project:项目名称
version:项目版本
egg:项目代码的python egg
# 实力请求
$ curl http:// localhost:6800 / addversion.json -F project = myproject -F version = r23 -F egg=@myproject.egg
# 响应示例
{ “status” : “ok” , “蜘蛛” : 3 }
schedule.json
安排蜘蛛运行,调度项目,返回作业id
# 示例请求
$ curl http:// localhost:6800 / schedule.json -d project = myproject -d spider = somespider
# 响应示例
{ “status” : “ok” , “jobid” : “6487ec79947edab326d6db28a2d86511e8247444” }
cancle.json
取消蜘蛛(取消作业)。如果作业处于待处理状态,则会将其删除。如果作业正在运行,它将被终止
# 示例请求
$ curl http:// localhost:6800 / cancel.json -d project = myproject -d job = 6487ec79947edab326d6db28a2d86511e8247444
# 响应示例
{ “status” : “ok” , “prevstate” : “running” }
listproject.json
获取上传到此scrapy服务器的项目列表
# 示例请求
$ curl http:// localhost:6800 / listprojects.json
# 响应示例
{ “status” : “ok” , “projects” : [ “myproject” , “otherproject” ]}
listversion.json
# 示例请求
$ curl http:// localhost:6800 / listversions.json?project = myproject
# 响应示例
{ “status” : “ok” , “versions” : [ “r99” , “r156” ]}
listspider.json
获取某个项目的最后一个(除非被覆盖)版本中可用的蜘蛛列表
# 示例请求
$ curl http:// localhost:6800 / listspiders.json?project = myproject
# 响应示例
{ “status” : “ok” , “蜘蛛” : [ “spider1” , “spider2” , “spider3” ]}
listjobs.json
获取某个项目的待处理,正在运行和已完成的作业列表
# 示例请求
$ curl http:// localhost:6800 / listjobs.json?project = myproject | python -m json.tool
# 响应示例
{
“status” : “ok” ,
“pending” : [
{
“project” : “myproject” , “spider” : “spider1” ,
“id” : “78391cc0fcaf11e1b0090800272a6d06”
}
],
“running” : [
{
“id” : “422e608f9f28cef127b3d5ef93fe9399” ,
“project” : “myproject” , “spider” : “spider2” ,
“start_time” : “2012-09-12 10:14:03.594664”
}
],
“完成” : [
{
“id” : “2f16646cfcaf11e1b0090800272a6d06” ,
“project” : “myproject” , “spider” : “spider3” ,
“start_time” : “2012-09-12 10:14:03.594664” ,
“end_time” : “2012-09 -12 10:24:03.594664“
}
]
}
delversion.json
删除项目版本,如果给定项目没有更多可用版本则该项目也将被删除
# 实例请求
$ curl http:// localhost:6800 / delversion.json -d project = myproject -d version = r99
# 示例响应
{ “status” : “ok” }