Scrapyd一般做为守护进程运行,它侦听运行爬虫的请求,并为每一个请求生成一个进程,该进程基本上执行:scrapy crawl [myspider]
。html
Scrapyd还并行运行多个进程,将它们分配到max_proc
和max_proc_per_cpu
选项提供的固定数量的插槽中,启动尽量多的进程来处理负载。python
除了调度和管理进程以外,Scrapyd还提供了一个JSON web服务来上载新的项目版本(做为egg)和调度爬虫。git
Scrapyd官方文档 scrapyd.readthedocs.io/en/latest/i…github
划重点:经过api方式多进程执行请求,在网页端查看正在执行的任务,也能新建爬虫任务,和终止爬虫任务。web
pip install scrapyd
复制代码
依赖的库及版本:json
在项目目录下,输入scrapyd
便可运行,默认地址为http://localhost:6800
api
scrapyd
复制代码
官方详细配置文档说明:scrapyd.readthedocs.io/en/latest/c…bash
修改默认配置信息能够在项目下新建一个scrapyd.conf
或者在scrapy.cfg
中增长[scrapyd]
:服务器
[scrapyd]
# 网页和Json服务监听的IP地址,默认为127.0.0.1
bind_address = 127.0.0.1
# 监听的端口,默认为6800
http_port = 6800
# 是否打开debug模式,默认为off
debug = off
# 每一个CPU可启用的Scrapy 进程数,默认为4
max_proc_per_cpu = 4
# 可启用的最多进程数,默认为0.若是未设置或者设为0,则使用的最多进程数=CPU数量*max_proc_per_cpu
max_proc = 0
# 项目eggs生成目录,默认为项目目录下eggs
eggs_dir = eggs
# 项目日志生成目录,默认为项目目录下logs,若是不想要生成日志,能够直接设置成空
logs_dir = logs
items_dir =
# 项目dbs生成目录,默认为项目目录下dbs
dbs_dir = dbs
# 爬取的items存储的文件夹(版本0.15.以上),默认为空,不存储。
items_dir =
# 每一个爬虫保持的完成任务数,默认为5.(版本0.15.以上,之前版本中为logs_to_keep)
jobs_to_keep = 5
# 保持的完成任务进程数。默认为100.(版本0.14.以上)
finished_to_keep = 100
# 轮训请求队列的时间间隔。默认为5s,能够为浮点数
poll_interval = 5.0
# 启动子进程的模块。可使用自定义
runner = scrapyd.runner
# 返回可用于twisted的application,可继承于Scrapyd添加和移除本身的组件和服务。 https://twistedmatrix.com/documents/current/core/howto/application.html查看更多
application = scrapyd.app.application
launcher = scrapyd.launcher.Launcher
# twisted的web资源,表示到scrapyd的接口。Scrapyd包含一个带有网站的界面,能够提供对应用程序的web资源的简单监视和访问。此设置必须提供twisted web资源的根类。
webroot = scrapyd.website.Root
复制代码
部署主要分为两步:app
egg
egg
经过Scrapyd的addversion.json
接口上传到目标服务器官方的部署上传接口文档:scrapyd.readthedocs.io/en/latest/a…
小编推荐使用Scrapyd-client
中的scrapyd-deploy一步上传,关于Scrapyd-client
介绍:
Scrapyd-client is a client for Scrapyd. It provides the general scrapyd-client and the scrapyd-deploy utility which allows you to deploy your project to a Scrapyd server.
划重点:打包上传一步到位。
Scrapy-client安装
pip install scrapyd-client
复制代码
部署:在项目目录下,即scrapy.cfg所在的目录下运行
scrapyd-deploy
复制代码
正确的结果:
可能出现的错误:
(1)Deploy failed: <urlopen error [WinError 10061] 因为目标计算机积极拒绝,没法链接。
缘由:Scrapyd未启动,须要先在项目目录下运行scrapyd
启动项目。
(2)'scrapyd-deploy' 不是内部或外部命令,也不是可运行的程序或批处理文件。
解决:
@echo off
python D:\Christina\AppData\Local\Programs\Python\Python36-32\Scripts\scrapyd-deploy %*
复制代码
GET http://127.0.0.1:6800/daemonstatus.json
复制代码
可查看当前的运行状态:将要执行的任务数、运行中的任务数、已经结束的任务数。如我用postman请求返回的结果
推荐使用上面的scrapyd-deploy
发布。
POST http://127.0.0.1:6800/addversion.json
复制代码
参数:
调度爬虫的运行,返回任务id。
POST http://127.0.0.1:6800/schedule.json
复制代码
参数:
scrapy crawl [爬虫名称]
运行时的名称。scrapy crawl [爬虫名称] -a accounts=testAdmin
后面-a所带的参数,在Spider中可经过self.testAdmin来获取值。小编经过postman访问,以下,返回的jobid
可用于查看任务状态,取消任务。
利用调度运行时返回的jobid
来取消。
POST http://localhost:6800/cancel.json
复制代码
参数:
Scrapyd可管理多个Scrapy项目,可经过此方法获取上传的项目。
GET http://127.0.0.1:6800/listprojects.json
复制代码
返回上传的项目的版本列表,最后一个为当前版本。
GET http://127.0.0.1:6800/listversions.json
复制代码
参数:
返回指定版本,如不指定则为最新版本的可用爬虫列表。
GET http://127.0.0.1:6800/listspiders.json
复制代码
参数:
获取指定项目的将要执行的、正在运行的、已经结束的任务
GET http://127.0.0.1:6800/listjobs.json
复制代码
参数:
删除指定项目的指定版本,注意:当项目没有其余版本可使用时,项目也会被删除。
POST http://127.0.0.1:6800/delversion.json
复制代码
参数:
删除一个项目及全部上传的版本。
POST http://127.0.0.1:6800/delproject.json
复制代码
参数:
本文结束啦--------
💡 更多好文欢迎关注个人公众号~