scrapyd

是什么?

  • scrapyd是scrapy官方提供的爬虫管理工具
  • 我们可以从任何一台能连接到服务器的pc发送请求来操控爬虫
    • 运行爬虫
    • 停止正在运行的爬虫
    • 上传新的爬虫
  • 版本控制功能

scrapyd的使用:

  • 安装 :pip install scrapyd
    • ubantu上安装请直接使用 sudo apt-get install scrapyd  
  • 运行 : scrapyd
    • 默认监听 0.0.0.0:6800 端口, 运行scrapyd之后, 在浏览器输入localhost:6800 即可查看当前运行的项目

工程的部署         

  要将项目完整的部署到服务器上,需要通过scrapyd的addversion.json服务将ptyhon编译成egg文件并上传到服务器

  我们可以以手动的方式将文件上传到服务器

  可以通过scrapyd-deploy软件包中附带的scrapyd-client客户端来完成这项工作

 

restful api

  • 如何调用api?
    • 任何能发送http请求的工具 如urllib, requests, curl
    • curl http://localhost:6800/api名称.json
  • 检查scrayd的运行状态
    • daemonstatus.json    get  
  • 向scrapyd增加一个项目版本,如果项目不存在,则自动创建一个项目
    • addversion.json   post  
  • 加载运行指定的蜘蛛
    • schedule.json  post   
  • 终止蜘蛛的作业
    • cancel.json  post  
  •  获取当前的scrapy服务器中所有的已上传的项目列表
    • listprojects.json  get
  • 获取项目中可用的版本列表,版本会按顺序排列,最后一个为当前正在使用的版本
    • listversions.json   get  
  • 获取当前版本中可用的蜘蛛
    • listspiders.json get 
  • 获取项目中待定,正在运行,或者已完成的作业列表
    • listjobs.json   get  
  • 删除项目中指定的版本
    • delversion.json  post  
  •  删除指定项目及其所有已上传的版本 
    • delproject.json  post 
    • curl  http://localhost:6800/delproject.json -d project=项目名称

版本管理api

  • curl http://localhost:6800/listversions.json?project=myproject
    • 获取项目中的版本列表,版本会按照顺序排列,最后一个为当前正在使用的版本
  • curl http://localhost:6800/addversion.json -F project=myproject -F version=r23 -F egg=@myproject.egg
    • 添加项目
    • project : 项目名
    • version : 版本
    • egg : python项目的egg文件
  • curl http://localhost:6800/delversion.json -d project=myproject -d bersion=r99
    • 删除项目中指定的版本
    • project : 项目名
    • version : 版本号            

作业管理api 

  • curl http://localhost:6800/listspiders.json?project=tutorial_deploy
    • 获取当前版本中可用的蜘蛛列表
  • curl http://localhost:6800/listjobs.json?project=myproject
    • 获取项目中待定,正在运行或已完成的作业列表
  • curl http://localhost:6800/cancel.json -d project=tutorial -d job='xxxxxxxxx'
    • 终止蜘蛛的作业
    • project : 项目名称
    • job : 作业编号
  • curl http://localhost:6800/schedule.json -d project=tutorial -d spider=tencent
    • project : 项目名称,必选
    • spide : 蜘蛛名称,必选

              
 scrapyd-client及部署

    是什么?

     scrapyd-client 是 scrayd的一个客户端工具,它提供了一系列的指令工具以简化scrapyd那些冗长的http指令请求,另外它还搭载了scrapyd-deploy部署工具,可以将开发环境中的代码部署到远程scrapyd服务器中
     安装:

   默认安装:

      pip install scrapyd-client

     scrapyd-client的官方版本在安装完成后是没有scrapyd-client指令的, 启用这个指令需要安装master bunch上的版本

      // pip3 install --upgrade git+ssh://git@github.com/scrapy/scrapyd-client.git

      tips: 有个坑: 我执行上边的语句安装包一只报错,最后选择去github上下载上边的包,本地安装

      安装方式:

        解压下载好的zip包

        打开终端, cd到这个包内

        执行python setup.py install

        在我的电脑上会报错,提示需要pyasn1这个包

        修改包文件夹下的requirements , 最下面一行添加一句 pyasn1, 再次执行 python setup.py install

 

指令语法  

  • scrapyd-client projects   列出默认服务器上的所有项目
  • scrapyd-client -t http://xxx projects  从指定服务器地址上列出所有项目
  • scrapyd-client schedule  启动任意的蜘蛛
  • scrapyd-client schedule -p sina *  启动指定项目sina中的所有蜘蛛
  • scrapyd-client schedule -p *  *_daily   支持通配符,启动所有以_daily结尾的项目中的蜘蛛
  • scrapyd-client spiders 列出所有的蜘蛛
  • scrapyd-client spiders -p sina   列出指定项目sina下的蜘蛛

  由于scrapyd-client deploy这个指令是最长用的,因此scrapyd-client提供了scrapyd-deploy命令

部署scrapyd项目            

 部署项目分为两步

  • 将当前项目的egg信息发布到服务器中,需要在当前项目下安装setuptools以支持此操作
  • 通过调用addversion.jsonAPI将egg上传到scrapyd服务器 

scrapyd-deploy可以自动完成以上两个步骤 

  • cd 到项目根目录
    • 修改一下scrapy.cfg 文件
    • [settings]
      default = jobSpider51job.settings
      // 给deploy起个名字,
      [deploy:job]
      url = http://localhost:6800/
      project = jobSpider51job
      Username = zhangjian  
  • scrapyd-deploy job -p jobSpider51job
    • 又遇到一个坑: 这个东西在项目下帮我生成了egg文件, 但是运行上面语句提示我在 /var/xx 的一个文件夹下找不到egg文件
    • 不知道如何解决, 暂时先将egg生成文件的路径修改成 /var/xx   
  • cd /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/scrapyd/
    vim default_scrapyd.conf
    
    default_scrapyd.conf   文件内容 eggs_dir
    = /var/folders/zq/9x6mmvl904vf4w_373f_vs7h0000gn/T/ logs_dir = logs items_dir = jobs_to_keep = 5 dbs_dir = dbs max_proc = 0 max_proc_per_cpu = 4 finished_to_keep = 100 poll_interval = 5.0 bind_address = 127.0.0.1 http_port = 6800 debug = off runner = scrapyd.runner application = scrapyd.app.application launcher = scrapyd.launcher.Launcher webroot = scrapyd.website.Root [services] schedule.json = scrapyd.webservice.Schedule cancel.json = scrapyd.webservice.Cancel addversion.json = scrapyd.webservice.AddVersion listprojects.json = scrapyd.webservice.ListProjects

        

项目部署实战

 

step1

  • 新建一个文件夹作为,如scrapydtest作为scrapyd管理的目录
  • 在该文件夹下打开终端 输入scrapyd

step2

  • 准备好爬虫项目pro1
  • 修改爬虫项目scrapy.cfg文件
  • [deploy:bd]     // 给deploy起个名字
    url = http://localhost:6800/   //将url注释解开
    project = pro1   //这是你的项目名字,不用修改
  • 在项目下文件夹下打开终端 输入scrapy list, 如果出现爬虫名则证明ok
  • scrapyd-deploy bd(你给deploy起的名字) -p pro1(项目名) , 如果成功则你的爬虫项目已经提交到远端了
  • 查看已经提交的项目 curl http://localhost:6800/listprojects.json
  • 查看某项目已经存在的版本 curl http://localhost:6800/listversions.json?project=pro1
  • 查看某项目当前版本中可用的蜘蛛  curl http://localhost:6800/listspiders.json?project=pro1
  • 运行刚才提交的爬虫 curl http://localhost:6800/schedule.json -d project=pro1 -d spider=baidu
  • 获取项目中待定,运行,完成的蜘蛛 curl http://localhost:6800/listjobs.json?project=pro1
  • 终止蜘蛛的作业 curl http://localhost:6800/cancel.json -d project=pro1 -d job=faba9f6e014011eabf88a0510bfb3f24
    • job后边的编号是刚才 listjob中看到的作业编号
  • 在项目中新生成一个蜘蛛, 然后重新提交项目  scrapyd-deploy bd -p pro2
  • listspiders会发现项目中已经有两个蜘蛛了

step3  

  准备好爬虫项目pro2

  重复上述操作

完成上述操作后:

  查看我们最开始创建好的scrapydtest文件夹,会发现文件夹中有三个文件夹,一个文件

  • dbs
    • pro1.db
    • pro2.db
  • eggs
    • pro1/{多个egg文件,每提交的一个版本对应一个egg文件}
    • pro2/{多个egg文件,每提交的一个版本对应一个egg文件}
  • logs
    • pro1(项目)
      • baidu (爬虫)
        • xxx.log  每运行一次都会保存一个log信息  
      • baidu1(爬虫)   
        • xxxx.log

 

 

 

 

 

 

 

 

 

 

 

posted @ 2019-11-06 10:21  眼镜儿  阅读(529)  评论(0编辑  收藏  举报