一    Scrapyd简介

Scrapyd 是一个用来部署和运行 Scrapy 项目的应用,由 Scrapy 的开发者开发。其可以通过一个简单的 Json API 来部署(上传)或者控制你的项目。

Scrapyd 可以用来管理多个项目,并且每个项目还可以上传多个版本,不过只有最新的版本会被使用。

在安装并开启 Scrapyd 之后,它将会挂起一个服务来监听运行爬虫的请求,并且根据请求为每一个爬虫启用一个进程来运行。Scrapyd 同样支持同时运行多个进程,进程的数量由max_proc 和 max_proc_per_cpu 选项来限制。

二 Scrapyd 安装部署

通常来说,使用 pip 安装 Scrapyd 即可:

  1. $ pip install scrapyd

部署 scrapy

  1. rsync -avz scrapyd crawler_server1:/data --exclude '*logs' --exclude '*.pyc' --exclude '*.db' --exclude '*env' --exclude '*eggs' --exclude '*.pid'
  2.  
  3. rsync -avz scrapyd crawler_server2:/data --exclude '*logs' --exclude '*.pyc' --exclude '*.db' --exclude '*env' --exclude '*eggs'
  4.  
  5. pip install -r requirements.txt

安装成功后使用以下命令即可以开启 Scrapyd 服务:

  1. 使用虚拟环境运行
  2. virtualenv -p /usr/bin/python3.6 env
  3. source env/bin/activate
  4.  
  5. python scripts/scrapyd_run.py

三 scrapyd  配置文件

Scrapyd 将会在以下地址搜索配置文件,在解析的过程中更高的配置文件拥有更高的优先级:

  • /etc/scrapyd/scrapyd.conf (Unix)
  • c:\scrapyd\scrapyd.conf (Windows)
  • /etc/scrapyd/conf.d/* (in alphabetical order, Unix)
  • scrapyd.conf
  • ~/.scrapyd.conf (users home directory)

配置文件中支持配置以下选项:

  

  • http_port

    Scrapyd 的API监听的端口,默认为6800

  • bind_address

    网页和Json服务监听的IP地址,默认为 127.0.0.1

  • max_proc

    同时启动的最大Scrapy进程数,如果没有设置或者设置为0,那么将会使用当前cpu可用的核数乘以 max_proc_per_cpu 的值。默认为0

  • max_proc_per_cpu

    每个cpu能同时启动的最大Scrapy进程数。默认为4

  • debug

    是否开启debug模式,默认为off。开启之后,如果在调用Scrapy的Json API的时候出错,则会返回详细的traceback信息。

  • eggs_dir

    项目的eggs文件存储的目录。

  • dbs_dir

    项目存储数据库的目录,也包括爬虫队列。

  • logs_dir

    存储Scrapy日志的目录。如果不希望存储日志,那么需要设置成如下所示:

    1. logs_dir =
  • items_dir

    存储items的目录,一般来说不需要设置这个选项,因为抓取下来的数据都会存到数据库中。如果设置这个选项,那么将会覆盖Scrapy的FEED_URL设置,将抓取下来的items保存到指定目录。

  • jobs_to_keep

    每个spider保留多少个完成的job,默认为5。这更多指的是itemlog

  • finished_to_keep

    启动器中保留的已完成进程的数量,默认为100

  • poll_interval

    轮询队列的间隔,以秒为单位,默认值为5,可以为浮点数。

  • runner

    用来启动子进程的启动器,可以自定义启动的模块。

  • node_name

    每个节点的节点名称,默认为 ${socket.gethostname()}

以下是一个默认的配置文件的例子:

  1. [scrapyd]
  2. eggs_dir = eggs
  3. logs_dir = logs
  4. items_dir =
  5. jobs_to_keep = 5
  6. dbs_dir = dbs
  7. max_proc = 0
  8. max_proc_per_cpu = 4
  9. finished_to_keep = 100
  10. poll_interval = 5.0
  11. bind_address = 127.0.0.1
  12. http_port = 6800
  13. debug = off
  14. runner = scrapyd.runner
  15. application = scrapyd.app.application
  16. launcher = scrapyd.launcher.Launcher
  17. webroot = scrapyd.website.Root
  18.  
  19. [services]
  20. schedule.json = scrapyd.webservice.Schedule
  21. cancel.json = scrapyd.webservice.Cancel
  22. addversion.json = scrapyd.webservice.AddVersion
  23. listprojects.json = scrapyd.webservice.ListProjects
  24. listversions.json = scrapyd.webservice.ListVersions
  25. listspiders.json = scrapyd.webservice.ListSpiders
  26. delproject.json = scrapyd.webservice.DeleteProject
  27. delversion.json = scrapyd.webservice.DeleteVersion
  28. listjobs.json = scrapyd.webservice.ListJobs
  29. daemonstatus.json = scrapyd.webservice.DaemonStatus

四  配置访问认证

  由于 Scrapyd 本身不提供访问的认证,所以接口都是暴露在公共网络中的,需要使用 Nginx 配置反向代理等方法来设置访问认证。

五 API

  在开启了 scrapyd 服务之后,就可以通过 Scrapyd 提供的 API 接口来操作你的 Scrapy 项目了。

  daemonstatus.json

  用来检查服务器的负载状态。支持的请求方法:GET

  request例子:

  1. curl http://localhost:6800/daemonstatus.json

  response例子:

  1. { "status": "ok", "running": "", "pending": "", "finished": "", "node_name": "node-name" }

  addversion.json

  给项目增加一个版本,如果项目不存在的话那么就创建一个项目。这个接口主要被用来上传项目或者更新项目版本。支持的请求方法:POST

  参数:

  • project (string, required) - 项目的名称
  • version (string, required) - 项目的版本
  • egg (file, required) - 一个包含项目代码的 egg 文件

  request例子:

  1. $ curl http://localhost:6800/addversion.json -F project=myproject -F version=r23 -F egg=@myproject.egg

  相应例子:

  1. {"status": "ok", "spiders": 3}

  schedule.json

  调度运行一个爬虫(也成为 job ),并返回一个 jobid。支持的请求方法:POST

  参数:

  • project (string, required) - 项目的名称
  • spider (string, required) - 爬虫的名称
  • setting (string, optional) - 爬虫运行时要用到的Scrapy设置
  • jobid (string, optional) - 用来作为标识的jobid,会覆盖掉默认生成的UUID
  • _version (string, optional) - 使用的项目版本
  • 任何其他的参数将会传递作为爬虫的参数

  request例子:

  1. $ curl http://localhost:6800/schedule.json -d project=myproject -d spider=somespider

  response例子:

  1. {"status": "ok", "jobid": "6487ec79947edab326d6db28a2d86511e8247444"}

  以下是传递 spider 参数和 setting 参数的例子:

  1. $ curl http://localhost:6800/schedule.json -d project=myproject -d spider=somespider -d setting=DOWNLOAD_DELAY=2 -d arg1=val1

  cancel.json

  取消一个 job 的运行,如果这个 job 处于等待的状态,那么将会被移除,如果这个 job 正在运行,那么它将会被终止。支持的请求方法:POST

  参数:

  • project (string, required) - 项目的名称
  • job (string, required) - job的id

  request例子:

  1. $ curl http://localhost:6800/cancel.json -d project=myproject -d job=6487ec79947edab326d6db28a2d86511e8247444

  response例子:

  1. {"status": "ok", "prevstate": "running"}

  listprojects.json

  获取上传到服务器的项目列表。支持请求方法:GET,无参数。

  request例子:

  1. $ curl http://localhost:6800/listprojects.json

  response例子:

  1. {"status": "ok", "projects": ["myproject", "otherproject"]}

  listversions.json

  获取某个或某些项目的版本列表。返回的版本将会按顺序排列,最后的那个版本是当前正在使用的版本。支持请求参数:GET

  参数:

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

  request例子:

  1. $ curl http://localhost:6800/listversions.json?project=myproject

  response例子:

  1. {"status": "ok", "versions": ["r99", "r156"]}

  listspiders.json

  默认获取某个项目最新版本中的spider列表。支持的请求方法:GET

  参数:

  • project (string, required) - 项目的名称
  • _version (string, optional) - 检查的项目版本

  request例子:

  1. $ curl http://localhost:6800/listspiders.json?project=myproject

  response例子:

  1. {"status": "ok", "spiders": ["spider1", "spider2", "spider3"]}

  listjobs.json

  获取某个项目正在等待、运行或者运行完毕的job列表。支持的请求类型:GET

  参数:

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

  request例子:

  1. $ curl http://localhost:6800/listjobs.json?project=myproject

  response例子:

  1. {"status": "ok",
  2. "pending": [{"id": "78391cc0fcaf11e1b0090800272a6d06", "spider": "spider1"}],
  3. "running": [{"id": "422e608f9f28cef127b3d5ef93fe9399", "spider": "spider2", "start_time": "2012-09-12 10:14:03.594664"}],
  4. "finished": [{"id": "2f16646cfcaf11e1b0090800272a6d06", "spider": "spider3", "start_time": "2012-09-12 10:14:03.594664", "end_time": "2012-09-12 10:24:03.594664"}]}

  delversion.json

  删除某个项目的某个版本,如果这个项目不再有能用的版本,那么项目也会被删除。支持的请求方法:POST

  参数:

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

  request例子:

  1. $ curl http://localhost:6800/delversion.json -d project=myproject -d version=r99

  

  response例子:  

  1. {"status": "ok"}

  delproject.json

  删除指定项目。支持请求方法:POST

  参数:

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

  request例子:

  1. $ curl http://localhost:6800/delproject.json -d project=myproject

  response例子:

  1. {"status": "ok"}

  

  1.  

 

scrapyd 参考(https://www.jianshu.com/p/2a189127901a)的更多相关文章

  1. python cookie登录DVWA,phpstudy搭建DVWA参考https://www.jianshu.com/p/97d874548300

    import requestsheader={"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleW ...

  2. [转]https://www.jianshu.com/p/06443248f4d8

    eos是什么? 原文 https://www.jianshu.com/p/06443248f4d8 简介 用一句话来定义eos,即:区块链操作系统,支持在它之上构建dapp,支持智能合约.帐户.身份验 ...

  3. fastdfs(https://www.jianshu.com/p/1c71ae024e5e)

    参考 官方网站:https://github.com/happyfish100/ 配置文档:https://github.com/happyfish100/fastdfs/wiki/ 参考资料:htt ...

  4. 当我写下Map<String,Object> map = new HashMap<>() https://www.jianshu.com/p/6b2e350e99be

    当我写下Map<String,Object> map = new HashMap<>();我到底在写什么? 我什么时候会写HashMap? 一个函数同时需要返回 多种 状态的情 ...

  5. Zabbix调优不完全指南(https://www.jianshu.com/p/2d911d55448f)

    从学习搭建zabbix到完成各类监控.调优.二次开发已经过去了两年,期间通过QQ学习群.zabbix官方社区.各个技术博客整理学习了不少关于各种报错的处理方法,现在将常见的一些报错处理方法整理出来分享 ...

  6. 接口测试之——Charles抓包及常见问题解决(转载自https://www.jianshu.com/p/831c0114179f)

    简介 Charles其实是一款代理服务器,通过成为电脑或者浏览器的代理,然后截取请求和请求结果达到分析抓包的目的.该软件是用Java写的,能够在Windows,Mac,Linux上使用,安装Charl ...

  7. jar与war包区别,转自https://www.jianshu.com/p/3b5c45e8e5bd

    https://www.jianshu.com/p/3b5c45e8e5bd

  8. 参考 https://raspberrypi.stackexchange.com/questions/3617/how-to-install-unrar-nonfree > 1.卸载unrar-free。 $ sudo apt-get remove unrar-free \ 2.通过编辑确保您拥有源存储库/etc/apt/sources.list。 $ cat /etc/apt/sources.

    from my CSDN: https://blog.csdn.net/su_cicada/article/details/86939944 参考 https://raspberrypi.stacke ...

  9. https://www.jianshu.com/p/1038c6170775

    import os # 方法一: os.walk实现 def items_dir(rootname): l = [] for main_dir, dirs, file_name_list in os. ...

随机推荐

  1. 线上服务内存OOM问题定位

    转自:架构师之路,http://mp.weixin.qq.com/s/iOC1fiKDItn3QY5abWIelg 相信大家都有感触,线上服务内存OOM的问题,是最难定位的问题,不过归根结底,最常见的 ...

  2. [C++] Vtable(虚函数表)

    Vtable(虚函数表)

  3. cakephp跳转到指定的错误页面

    第一步:修改core.php 第二步:创建AppExceptionRender.php文件 参考:https://blog.jordanhopfner.com/2012/09/11/custom-40 ...

  4. 去除json数据的某些键值对

    假如现在要处理的原始数据是字符串.形式如下: var vJson = { name: "张三", class: "软件工程一班" ,other:"无效 ...

  5. 04 Rabbits and Recurrence Relations

    Problem A sequence is an ordered collection of objects (usually numbers), which are allowed to repea ...

  6. 编写高质量代码改善C#程序的157个建议——建议106:为静态类添加静态构造函数

    建议106:为静态类添加静态构造函数 静态类可以拥有构造方法,这就是静态构造方法.静态构造方法与实例构造方法比较有几个自己的特点: 只被执行一次,且在第一次调用类成员之前被运行时执行. 代码无法调用它 ...

  7. 那些原生的javascript APIs

    在前端开发的时候,我们往往会使用javascript 框架,使用框架的好处多多,提供的方便的操作函数,类继承机制,MV*等,让我们能够快速开发,然而我们应该清楚这些框架都是基于浏览器原生api的封装, ...

  8. [修正] Firemonkey Windows 控件有虚线残影问题

    说明:在 Wndows 显示时,有时控件左方会显示一条虚线 适用:Firemonkey Windows (Berlin 或更高版) 修正方法: 请将源码 FMX.Canvas.D2D.pas 复制到自 ...

  9. 20145218张晓涵 web安全基础实践

    20145218张晓涵 web安全基础实践 1.实验后回答问题 SQL注入攻击原理,如何防御 SQL注入漏洞是指在Web应用对后台数据库查询语句处理存在的安全漏洞.也就是,在输入字符串中嵌入SQL指令 ...

  10. js学习日记-对象字面量

    一.对象字面量语法 var person={ name:'小王', age:18, _pri:233 } 成员名称的单引号不是必须的 最后一个成员结尾不要用逗号,不然在某些浏览器中会抛出错误 成员名相 ...