美文网首页大数据 爬虫Python AI SqlSpbeen——Python技术栈
【编号0003】Scrapy配套的部署工具和部署概念学习

【编号0003】Scrapy配套的部署工具和部署概念学习

作者: 布拉豆 | 来源:发表于2019-07-24 09:37 被阅读0次

    在一个Scrapy爬虫项目写好之后,启动和查看日志还不算麻烦,但是如果你的爬虫多,且启动方式及时间,比较有要求,那脚本管理,会非常的麻烦,有没有什么简单且方便的管理和部署工具呢?

    答案当然是有的,且这类工具还是比较多的,在此,本篇文章,就是针对于Scrapy项目的部署方式和工具,进行介绍

    1. scrapy项目的cfg文件

    在介绍正式部署前,首先了解下Scrapy的部署内容

    首先,一个完整的Scrapy项目,里面必须含有cfg后缀文件,和所需的py文件,以及spider目录下的爬虫文件,还有可能包含一些自定义的python包和工具函数。

    下图是一个最基础的爬虫项目的目录结构图【工具是Pycharm】:

    1.png

    其中,除了cfg文件之外,其他的py文件,都是给爬虫运行用的,都和部署没什么关系。那顺便来看下cfg文件的内容:

    2.png

    在这里面,有两个,第一个是settings,是指定项目中的配置文件;第二个是deploy,是部署用的,不过默认的url,被注释了,因为这是命令行部署用的,不太推荐

    2. Scrapy配套的部署工具库

    本篇文章的目的是部署和管理,但是部署的操作还是要学的,因为这是基础。

    为了方便的管理scrapy项目中爬虫的运行,scrapy框架有配套的部署工具,那就是scrapyd【注意,多了一个d】

    这个scrapyd框架,负责运行scrapyd项目,并且会记录日志。他的主要功能有:

    • 接收scrapy项目
    • 查看scrapy项目爬虫
    • 启动scrapy爬虫
    • 查看运行中的scrapy
    • 查看运行结束的scrapy

    功能够多吧,且说实话,都非常实用。但是呢,操作比较蛋疼,虽然scrapyd提供web界面,但是只能看,不能管理,管理需要命令行,那这就.....不免让大佬们心痒,纷纷推出了各自的Web管理工具,下文介绍。

    那这里呢,来说下scrapy、scrapyd之间的耦合,以及其他的第三方库。

    所需库的安装【未展示scrapy的安装,因为这里介绍部署,默认你了解了scrapy的开发】:

    • pip install scrapyd【运行scrapy的容器】
    • pip install scrapyd-client【用于打包scrapy项目到scrapyd中】

    这里涉及到scrapyd和scrapyd-client两个库,前者是服务型,用于跑scrapy爬虫的;后者是工具函数,用于打包scrapy文件的;

    3. Scrapyd-client介绍

    在scrapyd-client安装好之后呢,就有scrapy-deploy这个命令,但是你未必可以直接使用,可能会出现如下效果图:

    3.png

    问:不是已经安装了scrapyd-client,为什么系统无法识别呢?这个是什么原因导致的呢?

    答:是因为呀,在scrapyd-client安装的时候,提供了scrapyd-deploy的py文件,但是没有后缀,所以系统不能直接识别

    问:那怎么处理呢?

    答:这个文件的路径呢,是在你的Python安装位置的Scripts目录下,你需要在这里面,创建一个名为scrapyd-deploy.bat的文件,内容是:

    @echo off
    C:/Users/kelly/Anaconda3/python.exe C:/Users/kelly/Anaconda3/Scripts/Scrapyd-deploy
    

    Tips:

    • @echo off关闭具体执行命令输出的意思,如果你是win系统,可以去掉,对比看看
    • 这里面的路径,是我电脑上的Python路径,需要改成你的Python路径
    • bat是win系统可直接执行的文件,如果你的系统是Linux或Macos,需要写sh或可执行文件;

    这个文件添加好之后,重开一个CMD【终端】,测试效果,如下截图:

    4.png

    这个截图说明命令行正常工作了,但是当前的桌面目录,不是一个有效的scrapy项目,即不在scrapy项目内

    那工具的安装和测试,一切正常了,下面开始学习下scrapyd的作用

    4. Scrapyd介绍

    简单来描述下,scrapy是一个项目,scrapyd是管理scrapy正常运行的容器,可以停止、启动、查看状态,当然,这些都是命令行启动【这是最大的缺陷】

    当然scrapyd也是可以配置的,配置文件在scrapyd库里面,如下图:

    5.png

    打开它,内容是这样的,#后面是添加的注释:

    [scrapyd]
    eggs_dir    = eggs
    logs_dir    = logs
    items_dir   =
    jobs_to_keep = 5
    dbs_dir     = dbs
    max_proc    = 0
    max_proc_per_cpu = 4 #同时运行的最大进程数 = 4*核心数
    finished_to_keep = 100
    poll_interval = 5.0
    bind_address = 127.0.0.1   #本机用 127.0.0.1,外网访问改成 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
    

    上面都是默认配置,通常改了端口或者绑定的IP,其余的都不用怎么修改。

    修改好之后,打开CMD,进入到桌面上,然后执行scrapyd命令,服务就启动了,如下图:

    6.png

    在日志中,有个127.0.0.1:6800的连接,使用浏览器打开,有对应的页面,如下图:

    7.png

    这就是正常的页面了

    嗯,没错,虽然丑,但也是他,就是他

    好了,都正常了,那要怎么使用了?在这个界面上,有个curl http://localhost:6800/schedule.json -d project=default -d spider=somespider命令,没错,这就是驱使scrapyd工作的命令

    挺崩溃的,虽然可以管理爬虫,但是命令管理,难免让人心烦.......有界面有按钮的才是管理,这个是折磨

    别急,界面管理,下次分享,这次先打基础,熟悉下而已

    5. 学习使用命令部署爬虫

    在一切的开始前,我们需要先处理个东西,就是cfg文件,前面介绍过这是项目部署用的,现在在他里面改动一个内容,如下:

    8.png

    去掉之后,这部署,才会有目标地址

    于此同时,scrapyd也需要打开,且url指定的地址,就可以访问到scrapyd容器服务

    然后在spbeen的项目目录内,打开终端,输入命令scrapyd-deploy --build-egg spbeen.egg 效果图如下:

    9.png

    图中有Server response(200)的字样,说明爬虫已经部署上去了

    那,要怎么看scrapyd的状态呢?就那个丑的要死的界面,是没办法管理的

    当然是命令行控制了,再坚持一下,马上就要学完了

    6. 命令行调度

    1、查看scrapyd目前的状态:

    命令行:curl http://localhost:6800/daemonstatus.json

    返回结果:{"node_name": "v-win10", "status": "ok", "pending": 0, "running": 0, "finished": 0}

    2、列出Scrapyd中的项目

    命令行:curl http://localhost:6800/listprojects.json

    返回值:{"node_name": "v-win10", "status": "ok", "projects": ["spbeen"]}

    3、查看项目中的爬虫

    命令行:curl http://localhost:6800/listspiders.json?project=spbeen

    返回值:{"node_name": "v-win10", "status": "ok", "spiders": ["sp"]}

    4、启动爬虫

    命令行:curl http://localhost:6800/schedule.json -d project=spbeen -d spider=sp

    返回值:{"node_name": "v-win10", "status": "ok", "jobid": "5514a540ad6811e98d0bd8c497f4e6f4"}

    以上四个命令的配图:


    10.png

    5、Scrapyd网页界面的爬虫执行记录和日志截图

    11.png

    Scrapyd支持的命令行很多,贴个官方的API文档链接:Scrapy官方连接


    以上就是本篇文章的全部介绍内容了


    !放在最后

    如果文章中有什么错误或者建议修改的地方,欢迎留言纠正和回复

    如果你喜欢本篇文章,不妨关注一下我们的公众号,每周更新两篇原创技术文档,都是干货

    wxgzh1.png

    相关文章

      网友评论

        本文标题:【编号0003】Scrapy配套的部署工具和部署概念学习

        本文链接:https://www.haomeiwen.com/subject/ifetrctx.html