• scrapyd 参考(https://www.jianshu.com/p/2a189127901a)


     

    一    Scrapyd简介

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

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

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

    二 Scrapyd 安装部署

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

    $ pip install scrapyd

    部署 scrapy

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

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

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

    三 scrapyd  配置文件 

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

    • /etc/scrapyd/scrapyd.conf (Unix)
    • c:scrapydscrapyd.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日志的目录。如果不希望存储日志,那么需要设置成如下所示:

      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()}

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

    [scrapyd]
    eggs_dir    = eggs
    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
    listversions.json = scrapyd.webservice.ListVersions
    listspiders.json  = scrapyd.webservice.ListSpiders
    delproject.json   = scrapyd.webservice.DeleteProject
    delversion.json   = scrapyd.webservice.DeleteVersion
    listjobs.json     = scrapyd.webservice.ListJobs
    daemonstatus.json = scrapyd.webservice.DaemonStatus

    四  配置访问认证

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

    五 API

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

      daemonstatus.json

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

      request例子:

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

      response例子:

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

     

      addversion.json

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

      参数:

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

      request例子:

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

      相应例子:

    {"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例子:


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

      response例子:

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

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

    $ 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例子:

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

      response例子:

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

      listprojects.json

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

      request例子:

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

      response例子:

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

      listversions.json

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

      参数:

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

      request例子:

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

      response例子:

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

     

      listspiders.json

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

      参数:

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

      request例子:

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

      response例子:

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

      listjobs.json

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

      参数:

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

      request例子:

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

      response例子:

    {"status": "ok",
     "pending": [{"id": "78391cc0fcaf11e1b0090800272a6d06", "spider": "spider1"}],
     "running": [{"id": "422e608f9f28cef127b3d5ef93fe9399", "spider": "spider2", "start_time": "2012-09-12 10:14:03.594664"}],
     "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例子:

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

      

      response例子:  

    {"status": "ok"}

      delproject.json

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

      参数:

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

      request例子:

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

      response例子:

    {"status": "ok"}



       

    
    








     
  • 相关阅读:
    整除15问题
    软件工程基础Proposal提议
    对在大学阶段软件工程实践的一些想法
    运行web项目端口占用问题
    Day_1
    error C3615: constexpr 函数 "QAlgorithmsPrivate::qt_builtin_ctz" 不会生成常数表达式
    Qt应用程序的打包
    将html代码部署到阿里云服务器,并进行域名解析,以及在部署过程中遇到的问题和解决方法
    linux部署html代码到linux服务器,并进行域名解析
    运行sudo apt-get install nginx时报错有几个软件包无法下载,要不运行 apt-get update 或者加上 --fix-missing 的选项再试试?解决
  • 原文地址:https://www.cnblogs.com/wzbk/p/10332997.html
Copyright © 2020-2023  润新知