• 目录

    • 前言
    • 使用详解
      • 安装
      • 启动
      • 项目发布
      • 相关API使用
        • 查看服务进程状态
        • 项目发布版本
        • 调度爬虫
        • 取消任务
        • 获取上传的项目
        • 获取项目的版本
        • 获取项目的爬虫列表
        • 获取任务列表(Scrapyd 0.15版本以上)
        • 删除项目版本
        • 删除项目

前言

Scrapyd通常作为守护进程运行,它侦听运行爬虫的请求,并为每个请求生成一个进程,该进程基本上执行:scrapy crawl [myspider]

Scrapyd还并行运行多个进程,将它们分配到max_procmax_proc_per_cpu选项提供的固定数量的插槽中,启动尽可能多的进程来处理负载。

除了调度和管理进程之外,Scrapyd还提供了一个JSON web服务来上载新的项目版本(作为egg)和调度爬虫。

Scrapyd官方文档 https://scrapyd.readthedocs.io/en/latest/index.html

划重点:通过api方式多进程执行请求,在网页端查看正在执行的任务,也能新建爬虫任务,和终止爬虫任务。

使用详解

安装

pip install scrapyd

依赖的库及版本:

  • Python 2.7 or above
  • Twisted 8.0 or above
  • Scrapy 1.0 or above
  • six

启动

在项目目录下,输入scrapyd即可运行,默认地址为http://localhost:6800

scrapyd

官方详细配置文档说明:https://scrapyd.readthedocs.io/en/latest/config.html

修改默认配置信息可以在项目下新建一个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

项目发布

部署主要分为两步:

  • 将项目打包成egg
  • egg通过Scrapyd的addversion.json接口上传到目标服务器

官方的部署上传接口文档:https://scrapyd.readthedocs.io/en/latest/api.html#addversion-json

小编推荐使用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’ 不是内部或外部命令,也不是可运行的程序或批处理文件。

解决:

  • 进入安装python 的位置的Scripts文件夹

  • 创建文件 scrapyd-deploy.bat,用文本编辑器打开,添加如下内容并保存。注意:python后面的改为自己电脑下Scripts目录下的scrapyd-deploy
@echo off
python D:\Christina\AppData\Local\Programs\Python\Python36-32\Scripts\scrapyd-deploy %*

相关API使用

查看服务进程状态
GET http://127.0.0.1:6800/daemonstatus.json

可查看当前的运行状态:将要执行的任务数、运行中的任务数、已经结束的任务数。如我用postman请求返回的结果

项目发布版本

推荐使用上面的scrapyd-deploy发布。

POST http://127.0.0.1:6800/addversion.json

参数:

  • project(string, required),项目名称;
  • version(string, required),项目版本;
  • egg (file, required),打包的项目文件。
调度爬虫

调度爬虫的运行,返回任务id。

POST http://127.0.0.1:6800/schedule.json

参数:

  • project (string, required),项目名称。
  • spider (string, required),爬虫名称,即 Spider下的name属性指定的。即scrapy crawl [爬虫名称]运行时的名称。
  • setting (string, optional),运行时的设置文件,默认为项目下settings.py。
  • jobid (string, optional),任务id,不指定则为默认生成的UUID。
  • _version (string, optional),运行的项目的版本。
  • 任何其他的参数都被传递给爬虫的属性,即scrapy crawl [爬虫名称] -a accounts=testAdmin后面-a所带的参数,在Spider中可通过self.testAdmin来获取值。

小编通过postman访问,如下,返回的jobid可用于查看任务状态,取消任务。

取消任务

利用调度运行时返回的jobid来取消。

POST http://localhost:6800/cancel.json

参数:

  • project (string, required),项目名称。
  • job (string, required),任务id。

获取上传的项目

Scrapyd可管理多个Scrapy项目,可通过此方法获取上传的项目。

GET http://127.0.0.1:6800/listprojects.json

获取项目的版本

返回上传的项目的版本列表,最后一个为当前版本。

GET http://127.0.0.1:6800/listversions.json

参数:

  • project (string, required),项目名称。

获取项目的爬虫列表

返回指定版本,如不指定则为最新版本的可用爬虫列表。

GET http://127.0.0.1:6800/listspiders.json

参数:

  • project (string, required),项目名称。
  • _version (string, optional),运行的项目的版本。

获取任务列表(Scrapyd 0.15版本以上)

获取指定项目的将要执行的、正在运行的、已经结束的任务

GET http://127.0.0.1:6800/listjobs.json

参数:

  • project (string, required),项目名称。

删除项目版本

删除指定项目的指定版本,注意:当项目没有其他版本可以使用时,项目也会被删除。

POST http://127.0.0.1:6800/delversion.json

参数:

  • project (string, required) 项目名称。
  • version (string, required) 要删除项目的版本

删除项目

删除一个项目及所有上传的版本。

POST http://127.0.0.1:6800/delproject.json

参数:

  • project (string, required) 项目名称。

本文结束啦--------

原文链接

? 更多好文欢迎关注我的公众号~

Scrapyd使用详解相关推荐

  1. Scrapyd 使用详解

    Scrapyd 使用详解 ---ONE Goal , ONE Passion ! 前言: 必须清楚一点的是,scrapyd 不是scrapy. scarpy是一个爬虫框架, 而scrapyd是一个网页 ...

  2. 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)

    首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...

  3. JVM年轻代,老年代,永久代详解​​​​​​​

    秉承不重复造轮子的原则,查看印象笔记分享连接↓↓↓↓ 传送门:JVM年轻代,老年代,永久代详解 速读摘要 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.在 ...

  4. docker常用命令详解

    docker常用命令详解 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: Doc ...

  5. 通俗易懂word2vec详解词嵌入-深度学习

    https://blog.csdn.net/just_so_so_fnc/article/details/103304995 skip-gram 原理没看完 https://blog.csdn.net ...

  6. 深度学习优化函数详解(5)-- Nesterov accelerated gradient (NAG) 优化算法

    深度学习优化函数详解系列目录 深度学习优化函数详解(0)– 线性回归问题 深度学习优化函数详解(1)– Gradient Descent 梯度下降法 深度学习优化函数详解(2)– SGD 随机梯度下降 ...

  7. CUDA之nvidia-smi命令详解---gpu

    nvidia-smi是用来查看GPU使用情况的.我常用这个命令判断哪几块GPU空闲,但是最近的GPU使用状态让我很困惑,于是把nvidia-smi命令显示的GPU使用表中各个内容的具体含义解释一下. ...

  8. Bert代码详解(一)重点详细

    这是bert的pytorch版本(与tensorflow一样的,这个更简单些,这个看懂了,tf也能看懂),地址:https://github.com/huggingface/pytorch-pretr ...

  9. CRF(条件随机场)与Viterbi(维特比)算法原理详解

    摘自:https://mp.weixin.qq.com/s/GXbFxlExDtjtQe-OPwfokA https://www.cnblogs.com/zhibei/p/9391014.html C ...

最新文章

  1. easymock 图片_easy-mock的使用
  2. python基础语法手册format-python基础_格式化输出(%用法和format用法)
  3. Python3 实现用户登陆,输入三次密码
  4. 攻防世界Reverse第七题simple-unpack
  5. http://www.myeclipseide.com/ 官网打不开的问题(转)
  6. Windows下创建软硬链接
  7. Layer 2 DAO 基础协议 Metis 上线 Alpha 测试网
  8. python和c++哪个好-Scratch和Python与C++选哪个合适
  9. wifinative.java_AndroidQ Wifi打开流程(二)
  10. asp.net 利用特性和正则表达式进行字段的验证(attribute)
  11. Node.js中使用AWS SNS服务发送短信
  12. linux环境做路径左斜杠和右斜杠,不同操作系统下的路径分隔符—反斜杠与斜杠...
  13. OpenTCS打造移动机器人交通管制系统(三)
  14. Android指纹验证
  15. os系统服务器防火墙怎么关闭,mac防火墙如何关闭
  16. 7-19 统计人数(2008慈溪) (100分)
  17. 微信小程序--火车票查询
  18. hackinglab.cn脚本关之三
  19. Word中批量更新域的两个小方法
  20. 小米从北京迁往武汉南京,一线大厂逃离或为新常态?

热门文章

  1. AUTO CAD Electrical缺少AceRedist文件
  2. C++编程语言——动态内存分配
  3. Biotin-PEG-NH2,Biotin-PEG-amine,生物素-PEG-氨基材料改性用化学试剂
  4. 【2022】Java基础面试真题
  5. 软件测试工程师对学历有要求吗?你想知道的都在这儿了!
  6. 串口通讯控制器实现之----发送模块
  7. 系列终章 - 放眼未来!进击吧, Blazor !
  8. ubuntu22虚拟机设置中文界面
  9. Docker镜像文件介绍启动tomcat
  10. matlab中证明欧拉公式,欧拉公式证明