scrapyd的简单说明

来自scrapyd的知识

前言

scrapyd是运行scrapy爬虫的服务程序, 它支持以http命令方式发布、删除、启动、停止爬虫程序。而且scrapyd可以同时管理多个爬虫, 每个爬虫还可以有多个版本.

特点:

  • 可以避免爬虫源码被看到.
  • 有版本控制.
  • 可以远程启动, 停止, 删除 .

scrapyd

安装

windows: pip install scrapyd

组件需安装: pip install scrapyd-client(scrapyd-client提供scrapyd-deploy工具用于发布爬虫)

ubuntu: apt-get install scrapyd

组件需安装: pip3 install scrapyd-client


简单使用

在终端下使用运行: scrapyd # 运行后, 可以在browser中访问http://localhost:6800.

browser上是scrapyd提供的web界面, 可以查看运行spider的情况和日志.

scrapyd默认port为6800.

发布爬虫信息:

# 1.先设置scrapy项目中的scrapy.cfg文件
# 找到scrapy.cfg中的这 3 行.修改并保存.
[deploy:100]    # 这里加了 :100 表示将spider发布到名为100的服务器上. 
url = http://localhost:6800/    # 这里去掉注释, url就是scrapyd的默认web地址.
project = longzhu   # 这里为项目名, 可以自己写.

# 2.在终端中发布spider(这里用到scrapyd-client的工具), 需要先启动scrapyd.
# scrapyd-deploy  -p  --version 
# target为scrapy.cfg中deploy后的100, project为project名, version可自定义.下面为eg.
scrapyd-deploy 100 -p longzhu --version 8_9_12_15

# 发布后, 可以在scrapyd的web界面中看到相应的project名.
# Available project: longzhu defailut

运行scrapyd后, 在终端中运行spider: curl http://localhost:6800/schedule.json -d project=myproject -d spider=spidername

http://localhost:6800/schedule.json是scrapyd提供使用的API之一.

scrapyd中有10个API供我们使用, 详情可查看官方文档:


使用API

API的使用都是通过http协议发送请求.使用API返回为json格式的数据.

参数使用还是比较直观, 详细的参数介绍可以查看官方文档.

  1. 检查服务的负载状态(daemonstatus.json), GET

    
    # request
    
    curl http://localhost:6800/daemonstatus.json
    
    
    # response
    
    { "status": "ok", "running": "0", "pending": "0", "finished": "0", "node_name": "node-name" }
  2. 增加项目的新版本到服务器, 如果项目不存在则创建 (addversion.json) , POST

    
    # 参数: project 为项目名, version为项目版本名, egg为包含项目代码的egg文件
    
    
    # request
    
    curl http://localhost:6800/addversion.json -F project=myproject -F version=r23 -F [email protected]
    
    
    # response
    
    {"status": "ok", "spiders": 3}
  3. 运行指定的spider**(schedule.json)**,POST

    
    # 参数: project, spider, setting, jobid, _version, 其他额外的参数都会放入到spider的参数中.
    
    
    # request
    
    curl http://localhost:6800/schedule.json -d project=myproject -d spider=somespider
    
    
    # response
    
    {"status": "ok", "jobid": "6487ec79947edab326d6db28a2d86511e8247444"}
  4. 取消任务的执行或删除, 如果指定任务处于运行状态则会被终止, 如果处于待处理状态则被删除(cancel.json), POST

    
    # args: project, job.
    
    
    # request
    
    curl http://localhost:6800/cancel.json -d project=myproject -d job=6487ec79947edab326d6db28a2d86511e8247444
    
    
    # response
    
    {"status": "ok", "prevstate": "running"}
  5. 获取scrapyd服务器的项目列表(listprojects.json), GET

    
    # request
    
    curl http://localhost:6800/listprojects.json
    
    
    # response
    
    {"status": "ok", "projects": ["myproject", "otherproject"]}
  6. 获取指定项目可用的版本列表(listversions.json), GET

    
    # args: project.
    
    
    # request
    
    curl http://localhost:6800/listversions.json?project=myproject
    
    
    # response
    
    {"status": "ok", "versions": ["r99", "r156"]}
  7. 获取某个项目指定的或者默认最新的一个版本的spider列表(listspiders.json), GET

    
    # args: project, _version.
    
    
    # request
    
    curl http://localhost:6800/listspiders.json?project=myproject
    
    
    # response
    
    {"status": "ok", "spiders": ["spider1", "spider2", "spider3"]}
  8. 获取指定项目的待处理, 正在运行和已完成的任务列表(listjobs.json), GET

    
    # args: project
    
    
    # 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"}]}
  9. 删除项目的版本, 如果项目只有一个版本那么项目本身也会被删除(delversion.json), POST

    
    # args: project, version
    
    
    # request
    
    curl http://localhost:6800/delversion.json -d project=myproject -d version=r99
    
    
    # response
    
    {"status": "ok"}
  10. 删除项目及其所有在服务器上的版本(delproject.json), POST

    
    # args: project
    
    
    # request
    
    curl http://localhost:6800/delproject.json -d project=myproject
    
    
    # response
    
    {"status": "ok"}

你可能感兴趣的:(python)