scrapyd爬虫部署

1,667 阅读3分钟

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信息

删除爬虫项目

scrapyd.readthedocs.io

检查服务器的负载状态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 101403.594664” 
        } 
    ],
    “完成” : [
        { 
            “id” : “2f16646cfcaf11e1b0090800272a6d06” ,
            “project” : “myproject” , “spider” : “spider3” ,
            “start_time” : “2012-09-12 101403.594664” ,
            “end_time” : “2012-09 -12 102403.594664“ 
        } 
    ] 
}

delversion.json

删除项目版本,如果给定项目没有更多可用版本则该项目也将被删除
# 实例请求
$ curl http:// localhost:6800 / delversion.json -d project = myproject -d version = r99

# 示例响应
{ “status” : “ok” }