zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Nginx之HTTP过滤模块
    Nginx之编写HTTP模块
    Nginx之最简单的反向代理机制分析
    Nginx之搭建反向代理实现tomcat分布式集群
    Nginx之configure选项
    Nginx-HTTP之ngx_http_top_body_filter
    Nginx-HTTP之ngx_http_top_header_filter
    Nginx-HTTP之静态网页访问流程分析二
    error: ‘Poco::UInt16’ has not been declared
    字符数组中查找字符串或字符数组
  • 原文地址:https://www.cnblogs.com/zhangjian0092/p/11803534.html
Copyright © 2011-2022 走看看