• 基于scrapyd爬虫发布总结


    一、版本情况

    python以丰富的三方类库取得了众多程序员的认可,但也因此带来了众多的类库版本问题,本文总结的内容是基于最新的类库版本。

    1、scrapy版本:1.1.0

    D:pythonSpider-masterccpmess>scrapy version -v
    Scrapy    : 1.1.0
    lxml      : 3.6.0.0
    libxml2   : 2.9.0
    Twisted   : 16.1.1
    Python    : 2.7.11rc1 (v2.7.11rc1:82dd9545bd93, Nov 21 2015, 23:25:27) [MSC v.1500 64 bit (AMD64)]
    pyOpenSSL : 16.0.0 (OpenSSL 1.0.2g  1 Mar 2016)
    Platform  : Windows-10-10.0.10586

    2、scrapyd 版本:1.1.0

    D:>scrapyd
    2016-06-30 15:21:14+0800 [-] Log opened.
    2016-06-30 15:21:14+0800 [-] twistd 16.1.1 (C:Python27python.exe 2.7.11) starting up.
    2016-06-30 15:21:14+0800 [-] reactor class: twisted.internet.selectreactor.SelectReactor.
    2016-06-30 15:21:14+0800 [-] Site starting on 6800
    2016-06-30 15:21:14+0800 [-] Starting factory <twisted.web.server.Site instance at 0x00000000046D6808>
    2016-06-30 15:21:14+0800 [Launcher] Scrapyd 1.1.0 started: max_proc=16, runner='scrapyd.runner'

    a、scrapyd在windows下默认使用c:scrapydscrapyd.cfg作为配置,若是没有配置,则使用默认值,下面给个例子。

    [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
    bind_address = 0.0.0.0
    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
    View Code


    b、默认路径为c:盘根目录,爬虫发布后,会在c:盘根目录生成三个文件夹:eggs、logs、dbs,分别存放egg包,爬虫执行日志,爬虫数据。


     

    二、官网文档

    1、scrapy

    http://scrapy.readthedocs.io/en/latest/  英文版

    2、scrapyd

    http://scrapyd.readthedocs.io/en/latest


    特别说明,百度上搜索出来的很多scrapy和scrapyd的资料已经过时,因为这两个三方库一直在更新,导致很多过去的总结,现在已经不适用。

    虽然这两个文档都是E文的(scrapy有一个中文版,但是不全),对于大家的E文是一个挑战,但是用来简单查查资料,还是可以的。

    三、用途说明

    1、scrapy

    有名的爬虫框架,模块化、结构化相对做得好,基于scrapy开发爬虫,其效率、稳定性都比白手起家要好很多。

    2、scrapyd

    Scrapyd is a service for running Scrapy spiders.
    It allows you to deploy your Scrapy projects and control their spiders using a HTTP JSON API. 
    Scrapyd can manage multiple projects and each project can have multiple versions uploaded, but only the latest one will be used for launching new spiders.

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


    四、使用说明

    1、scrapyd安装

    D:>pip install scrapyd

    使用pip命令,系统会自动安装辅助scrapyd及依赖组件。

    这里需要补充一点,目前pip默认源上的scrapyd不是最新的release版本,会出现很多命令不支持的情况。

    所以建议进入到https://github.com/scrapy/scrapyd网站下载最新源码版本,然后解压到任意目录,再用python setup.py install命令手动安装。

     
    C:Python27Libsite-packagesscrapyd-master>dir setup.py

    驱动器 C 中的卷是 Windows
     卷的序列号是 9C3D-C0EC

     C:Python27Libsite-packagesscrapyd-master 的目录

    2016-05-20  23:35             1,538 setup.py
                   1 个文件          1,538 字节
                   0 个目录 26,489,679,872 可用字节

    C:Python27Libsite-packagesscrapyd-master>python setup.py install

     ……

     

    2、scrapyd运行

    D:>scrapyd
    2016-07-01 23:12:16+0800 [-] Log opened.
    2016-07-01 23:12:16+0800 [-] twistd 16.1.1 (C:Python27python.exe 2.7.11) starting up.
    2016-07-01 23:12:16+0800 [-] reactor class: twisted.internet.selectreactor.SelectReactor.
    2016-07-01 23:12:16+0800 [-] Site starting on 6800
    2016-07-01 23:12:16+0800 [-] Starting factory <twisted.web.server.Site instance at 0x0000000004688808>
    2016-07-01 23:12:16+0800 [Launcher] Scrapyd 1.1.0 started: max_proc=16, runner='scrapyd.runner' 

     默认情况下scrapyd运行后会侦听6800端口,注意最新的版本只有jobs、logs、documentation,3个菜单项,pip里安装的版本,运行后有4个菜单。

     

     3、scrapyd支持的API 介绍

     scrapyd支持一系列api,下面用一个py文件来介绍

    # -*- coding: utf-8 -*-

    import requests
    import json 

    baseUrl ='http://127.0.0.1:6800/'
    daemUrl ='http://127.0.0.1:6800/daemonstatus.json'
    listproUrl ='http://127.0.0.1:6800/listprojects.json'
    listspdUrl ='http://127.0.0.1:6800/listspiders.json?project=%s'
    listspdvUrl= 'http://127.0.0.1:6800/listversions.json?project=%s'
    listjobUrl ='http://127.0.0.1:6800/listjobs.json?project=%s'
    delspdvUrl= 'http://127.0.0.1:6800/delversion.json'

    #http://127.0.0.1:6800/daemonstatus.json
    #查看scrapyd服务器运行状态
    r= requests.get(daemUrl)
    print '1.stats :  %s  '  %r.text  

    #http://127.0.0.1:6800/listprojects.json
    #获取scrapyd服务器上已经发布的工程列表
    r= requests.get(listproUrl)
    print '1.1.listprojects : [%s] '  %r.text
    if len(json.loads(r.text)["projects"])>0 :
        project = json.loads(r.text)["projects"][0]

    #http://127.0.0.1:6800/listspiders.json?project=myproject
    #获取scrapyd服务器上名为myproject的工程下的爬虫清单
    listspd=listspd % project
    r= requests.get(listspdUrl)
    print '2.listspiders : [%s] '  %r.text 
    if json.loads(r.text).has_key("spiders")>0 :
        spider =json.loads(r.text)["spiders"][0]


    #http://127.0.0.1:6800/listversions.json?project=myproject
    ##获取scrapyd服务器上名为myproject的工程下的各爬虫的版本
    listspdvUrl=listspdvUrl % project
    r = requests.get(listspdvUrl)
    print '3.listversions : [%s] '  %rtext 
    if len(json.loads(r.text)["versions"])>0 :
        version = json.loads(r.text)["versions"][0]

    #http://127.0.0.1:6800/listjobs.json?project=myproject
    #获取scrapyd服务器上的所有任务清单,包括已结束,正在运行的,准备启动的。
    listjobUrl=listjobUrl % proName
    r=requests.get(listjobUrl)
    print '4.listjobs : [%s] '  %r.text 


    #schedule.json
    #
    http://127.0.0.1:6800/schedule.json -d project=myproject -d spider=myspider
    #启动scrapyd服务器上myproject工程下的myspider爬虫,使myspider立刻开始运行,注意必须以post方式
    schUrl = baseurl + 'schedule.json'
    dictdata ={ "project":project,"spider":spider}
    r= reqeusts.post(schUrl, json= dictdata)
    print '5.1.delversion : [%s] '  %r.text 


    #http://127.0.0.1:6800/delversion.json -d project=myproject -d version=r99'
    #删除scrapyd服务器上myproject的工程下的版本名为version的爬虫,注意必须以post方式
    delverUrl = baseurl + 'delversion.json'
    dictdata={"project":project ,"version": version }
    r= reqeusts.post(delverUrl, json= dictdata)
    print '6.1.delversion : [%s] '  %r.text 

    #http://127.0.0.1:6800/delproject.json -d project=myproject
    #删除scrapyd服务器上myproject工程,注意该命令会自动删除该工程下所有的spider,注意必须以post方式
    delProUrl = baseurl + 'delproject.json'
    dictdata={"project":project  }
    r= reqeusts.post(delverUrl, json= dictdata)
    print '6.2.delproject : [%s] '  %r.text 

    总结一下:

    1、获取状态
    http://127.0.0.1:6800/daemonstatus.json
    2、获取项目列表
    http://127.0.0.1:6800/listprojects.json
    3、获取项目下已发布的爬虫列表
    http://127.0.0.1:6800/listspiders.json?project=myproject
    4、获取项目下已发布的爬虫版本列表
    http://127.0.0.1:6800/listversions.json?project=myproject
    5、获取爬虫运行状态
    http://127.0.0.1:6800/listjobs.json?project=myproject
     6、启动服务器上某一爬虫(必须是已发布到服务器的爬虫)
    http://localhost:6800/schedule.json (post方式,data={"project":myproject,"spider":myspider})
    7、删除某一版本爬虫
    http://127.0.0.1:6800/delversion.json (post方式,data={"project":myproject,"version":myversion})
    8、删除某一工程,包括该工程下的各版本爬虫
     
    http://127.0.0.1:6800/delproject.json(post方式,data={"project":myproject})

    这里可以看到,有删除爬虫的APi,有启动爬虫的API,独独没有发布爬虫的API,为什么呢?
    因为发布爬虫需要使用另一个专用工具Scrapyd-client。

    五、发布爬虫的工具Scrapyd-client

    Scrapyd-client是一个专门用来发布scrapy爬虫的工具,安装该程序之后会自动在c:pythonscripts安装一个名为scrapyd-deploy的工具(其实打开该文件,可以发现它是一个类似setup.py的python脚本,所以可以通过python scrapyd-deploy的方式运行)。 

    1、安装方法

    C:>pip install Scrapyd-client

    ……


    C:Python27Scripts>dir sc*
     驱动器 C 中的卷是 Windows
     卷的序列号是 9C3D-C0EC

     C:Python27Scripts 的目录

    2016-06-29  11:19               313 scrapy-script.py
    2016-06-29  11:19            74,752 scrapy.exe
    2016-06-29  09:10             9,282 scrapyd-deploy
    2016-06-29  11:19               318 scrapyd-script.py
    2016-06-29  11:19            74,752 scrapyd.exe
                   5 个文件        159,417 字节


    2、运行方法

    1)、拷贝scrapyd-deploy工具到爬虫目录下 

    D:pythonSpider-masterccpmess>dir
     驱动器 D 中的卷没有标签。
     卷的序列号是 36D9-CDC7

     D:pythonSpider-masterccpmess 的目录

    2016-07-01  23:52    <DIR>          .
    2016-07-01  23:52    <DIR>          ..
    2016-06-30  13:52    <DIR>          ccpmess
    2016-06-30  13:37               662 ccpmess-main.py
    2016-06-30  13:53             1,022 ccpmess.wpr
    2016-07-01  14:52            78,258 ccpmess.wpu
    2016-06-30  14:07               324 scrapy.cfg
    2016-06-29  09:10             9,282 scrapyd-deploy

     2)修改爬虫的scapy.cfg文件

    首先去掉url前的注释符号,这里url就是你的scrapyd服务器的网址。

    其次,deploy:127表示把爬虫发布到名为127的爬虫服务器上。

    这个名叫target名字可以随意起,一般情况用在需要同时发布爬虫到多个目标服务器时,可以通过指定名字的方式发布到指定服务器。

    其次,default=ccpmess.settings 中 ccpmess也是可以改的,貌似没啥用,默认还是用工程名字。

    关键是scrapyd-deploy 所在目录,具体其实可以读下scrapyd-deploy 的代码。

     D:pythonSpider-masterccpmess>type scrapy.cfg
    # Automatically created by: scrapy startproject
    #
    For more information about the [deploy] section see:
    # https://scrapyd.readthedocs.org/en/latest/deploy.html

    [settings]
    default = ccpmess.settings

    [deploy:127]
    url = http://127.0.0.1:6800/
    project = ccpmess

    [deploy:141]
    url = http://138.0.0.141:6800/
    project = ccpmess

     

    3)查看配置

    检查scrapy配置是否正确。 

    D:pythonSpider-masterccpmess>python scrapyd-deploy -l
    141                  http://138.20.1.141:6800/
    127                  http://127.0.0.1:6800/ 

    4)发布爬虫

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

    target就是前面配置文件里deploy后面的的target名字。
    project 可以随意定义,跟爬虫的工程名字无关。
    version自定义版本号,不写的话默认为当前时间戳。

    注意,爬虫目录下不要放无关的py文件,放无关的py文件会导致发布失败,但是当爬虫发布成功后,会在当前目录生成一个setup.py文件,可以删除掉。 

    D:pythonSpider-masterccpmess>python scrapyd-deploy 127 -p projectccp --version ver20160702
    Packing version ver20160702
    Deploying to project "projectccp" in http://127.0.0.1:6800/addversion.json
    Server response (200):
    {"status": "ok", "project": "projectccp", "version": "ver20160702", "spiders": 1, "node_name": "compter……"} 

     到此,基于scrapyd的爬虫发布教程就写完了。

    可能有人会说,我直接用scrapy cwal 命令也可以执行爬虫,个人理解用scrapyd服务器管理爬虫,至少有以下几个优势:

    1、可以避免爬虫源码被看到。

    2、有版本控制。

    3、可以远程启动、停止、删除,正是因为这一点,所以scrapyd也是分布式爬虫的解决方案之一。

     <--END-->

  • 相关阅读:
    tensorflow2.0 GPU和CPU 时间对比
    第一次使用FileZilla Server
    PremiumSoft Navicat 15 for Oracle中文破解版安装教程
    Unmapped Spring configuration files found. Please configure Spring facet or use 'Create Default Context' to add one including all unmapped files.
    ng : 无法加载文件 D: odejs ode_global g.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
    angular
    Github上优秀的go项目
    win10---file explore 中remove quick access folder
    react--useEffect使用
    linux---cat 和 grep 的妙用
  • 原文地址:https://www.cnblogs.com/zhongtang/p/5634545.html
Copyright © 2020-2023  润新知