zoukankan      html  css  js  c++  java
  • scrapy项目部署

    什么是scrapyd

    Scrapyd是部署和运行Scrapy.spider的应用程序。它使您能够使用JSON API部署(上传)您的项目并控制其spider。

    特点:

    1. 可以避免爬虫源码被看到。
    2. 有版本控制。
    3. 可以远程启动、停止、删除

    scrapyd官方文档:http://scrapyd.readthedocs.io/en/stable/overview.html

    安装scrapyd

    1. 安装scrapyd
    • 主要有两种安装方式:
    • pip install scrapyd (安装的版本可能不是最新版本)
    • https://github.com/scrapy/scrapyd 中下载源码, 运行python setup.py install 命令进行安装。

      2.安装 scrapyd-deploy

    • 主要有两种安装方式:
    • pip install scrapyd-client(安装的版本可能不是最新版本)
    • http://github.com/scrapy/scrapyd-client 中下源码, 运行python setup.py install 命令进行安装。

    scrapyd的简单使用

    1.运行scrapyd

    运行命令:scrapyd

    然后打开浏览器,输入ip加端口:127.0.0.1:6800(或localhost:6800)

    2.发布项目到scrapyd

    来到待发布项目的文件夹下,发布前需要修改一下配置文件,打开scrapy.cfg文件;

    1. 首先去掉url前面的注释符号,url是scrapyd服务器的网址
    2. 然后project=tenCent为项目名称,可以随意起名
    3. 修改[deploy]为[deploy:100],表示把爬虫发布到名为100的爬虫服务器上,一般在需要同时发布爬虫到多个目标服务器时使用

    最后,打开一个新的终端,运行命令:

    scrapyd-deploy <target> -p <project>  --version <version>
    

      参数解释:

    Target:deploy后面的名称。可以为空

    Project:自行定义名称,跟爬虫的工程名字无关。

    Version:自定义版本号,不写的话默认为当前时间戳。

    刷新浏览器页面:

    3.创建运行爬虫任务

    使用命令:

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

     然后点击浏览器界面的Jobs

    就可以得到该爬虫的相关运行信息。这里的schedule.json只是scrapyd里的一个API接口,scrapyd还提供其他API接口,具体如下。

    scrapyd的控制API

    所有的API都是通过http协议发送的请求,目前总共10个api

    规则是:http://ip:port/api_command.json,有GET和POST两种请求

    1)   daemonstatus.json

    检查服务状态

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

    结果示例:

    2)   addversion.json

    增加项目到服务器,如果项目已经存在,则增加一个新的版本

    POST请求:

    • project (string, required) –项目名
    • version (string, required) –项目版本,不填写则是当前时间戳
    • egg (file, required) –当前项目的egg文件
    curl http://localhost:6800/addversion.json -F project=myproject -F version=r23 -F egg=@myproject.egg

    结果示例:

    3)   schedule.json

    启动一个爬虫项目

    POST请求:

    • project (string, required) –项目名
    • spider (string, required) –爬虫名,spider类中指定的name
    • setting (string, optional) –自定义爬虫settings
    • jobid (string, optional) –jobid,之前启动过的spider,会有一个id
    • _version (string, optional) –版本号,之前部署的时候的version,只能使用int数据类型,没指定,默认启动最新版本
    • 其他额外的参数都会放入到spider的参数中
    curl http://localhost:6800/schedule.json -d project=myproject -d spider=somespider

    结果示例:

    4)   cancel.json

    取消一个 spdier的运行

    如果 spider是运行状态,则停止其运行

    如果 spider是挂起状态,则删除spider

    POST请求:

    • project (string, required) –项目名
    • job (string, required) -jobid
    curl http://localhost:6800/cancel.json -d project=myproject -d job=6487ec79947edab326d6db28a2d86511e8247444

    结果示例:

    5)   listprojects.json

    获取当前已上传的项目的列表

    GET请求:

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

    结果示例:

    6)   listversions.json

    获取指定项目的可用版本

    GET请求:

    • project (string, required) –项目名
     curl http://localhost:6800/listversions.json?project=myproject

    结果示例:

    7)   listspiders.json

    获取指定版本的项目中的爬虫列表,如果没有指定版本,则是最新版本

    GET请求:

    • project (string, required) –项目名
    • _version (string, optional) –版本号
    $ curl http://localhost:6800/listspiders.json?project=myproject

    结果示例:

    8)   listjobs.json

    获取指定项目中所有挂起、运行和运行结束的job

    GET请求

    • project (string, option) - restrict results to project name
    curl http://localhost:6800/listjobs.json?project=myproject | python -m json.tool

    结果示例:

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

    9)   delversion.json

    删除指定项目的指定版本

    POST请求

    • project (string, required) - the project name
    • version (string, required) - the project version
    curl http://localhost:6800/delversion.json -d project=myproject -d version=r99

    结果示例:

    10)   delproject.json

    删除指定项目,并且包括所有的版本

    POST请求

    • project (string, required) - the project name
    curl http://localhost:6800/delproject.json -d project=myproject

     结果示例:

    BUG处理

    1、 builtins.KeyError: 'project'

    错误信息如下:

     

    解决:

    进行post提交时,需要将参数提交放入到 params或 data中,而不是json

    如:requests.post(url, params=params)或requests.post(url, data=params)

    2、 TypeError: __init__() missing 1 required positional argument: 'self'

           修改 spider,增加:

            def __init__(self, **kwargs):
               super(DingdianSpider, self).__init__(self, **kwargs)

    3、 redis.exceptions.ConnectionError: Error 10061 connecting to localhost:6379

    有类似这样的错误,是由于项目中有连接其他服务,譬如这里是redis数据库,需要先启动对应的服务

  • 相关阅读:
    vue中的 computed 和 watch 的区别
    mysql8.0 初始化数据库及表名大小写问题
    sql server alwayson 调整数据文件路径
    zabbix 自定义监控 SQL Server
    mysql 创建用户及授权
    mysql 设置从库只读模式
    mysql8.0 主从复制安装及配置
    centos8.0安装mysql8.0
    centos8替换阿里数据源
    npm publish 报错 【you or one of your dependencies are requesting a package version that is forbidden by your security policy】
  • 原文地址:https://www.cnblogs.com/pythoner6833/p/9100783.html
Copyright © 2011-2022 走看看