美文网首页
爬虫实战六、Scrapy爬虫部署工具Scrapyd服务搭建

爬虫实战六、Scrapy爬虫部署工具Scrapyd服务搭建

作者: Cehae | 来源:发表于2019-02-21 12:06 被阅读0次

    一、Scrapyd简介

    scrapyd是一个用于部署和运行scrapy爬虫的程序,它允许你通过JSON API来部署爬虫项目和控制爬虫运行。

    scrapyd可以管理多个项目,并且每个项目允许有多个版本,但是只有最新的版本会被用来运行爬虫。

    最方便的版本管理就是利用VCS工具来记录你的爬虫代码,版本比较不是简单的通过字母排序,而是通过智能的算法,和distutils一样,例如: r10比r9更大。

    scrapyd是一个守护进程,监听爬虫的运行和请求,然后启动进程来执行它们。

    二、Scrapyd安装

    2-1、环境准备(很重要)

    2-2、Linux安装scrapyd服务

    执行以下命令安装

    pip install scrapyd
    
    图片.png

    只要步骤2-1、中Linux的环境准备好,步骤2-2、的安装很简单。

    2-3、Windows安装scrapyd-client

    win键+r,输入cmd,然后在命令行输入命令执行

    pip install scrapyd-client
    
    图片.png 图片.png

    出现successfully installed scrapyd-client……说明安装成功。只要步骤2-1、中Windows的环境准备好,步骤2-3、的安装很简单。

    三、scrapyd-client连接scrapyd服务

    scrapyd服务要支持其他IP访问需要修改scrapyd配置文件:default_scrapyd.conf。
    一般都在

    /usr/lib/python2.7/site-packages/scrapyd/default_scrapyd.conf 
    

    如果没有使用find命令查找文件。

    find / -name "default_scrapyd.conf"
    

    找到后修改文件

    vim /usr/lib/python2.7/site-packages/scrapyd/default_scrapyd.conf 
    

    修改bind_address = 0.0.0.0

    图片.png

    修改完毕重启scrapyd服务。

    scrapyd
    

    浏览器输入:http://docker200:6800/(docker200是我设置的主机名和IP映射,可以直接使用scrapyd服务的IP地址)出现以下页面代表连接成功。

    图片.png

    如果不成功,关闭防火墙。

    systemctl stop firewalld.service
    

    或者单独放行6800端口。

    firewall-cmd --zone=public --add-port=6800/tcp --permanent
    

    四、编写scrapyd后台启动脚本

    由于scrapyd是前台启动,使用不方便,所以可以采用

    setsid scrapyd
    

    命令来后台开启服务,这样关闭窗口后仍能进行连接。需要结束scrapyd进程时,利用

    ps -ef | grep -i scrapyd 
    

    命令查看PID号,再使用

    kill -9 PID
    

    命令杀死进程。

    但是整个使用过程还是比较麻烦,因此最好创建 scrapyd 后台启动脚本方便使用。

    4-1、创建后台启动脚本

    在 /etc/init.d 目录下面,新建文件scrapyd,粘贴一下代码,其中HOME为scrapyd运行的目录,如果没有需要新建。BIN为scrapyd安装目录。以个人实际情况修改。注意要给scrapyd脚本可执行权限。

    #!/bin/bash
    PORT=6800
    HOME="/var/scrapyd"
    BIN="/usr/local/bin/scrapyd"
     
    pid=`netstat -lnopt | grep :$PORT | awk '/python/{gsub(/\/python/,"",$7);print $7;}'`
    start() {
       if [ -n "$pid" ]; then
          echo "server already start,pid:$pid"
          return 0
       fi
     
       cd $HOME
       nohup $BIN >> $HOME/scrapyd.log 2>&1 &
       echo "start at port:$PORT"
    }
     
    stop() {
       if [ -z "$pid" ]; then
          echo "not find program on port:$PORT"
          return 0
       fi
     
       #结束程序,使用讯号2,如果不行可以尝试讯号9强制结束
       kill -9 $pid
       echo "kill program use signal 9,pid:$pid"
    }
     
    status() {
       if [ -z "$pid" ]; then
          echo "not find program on port:$PORT"
       else
          echo "program is running,pid:$pid"
       fi
    }
     
    case $1 in
       start)
          start
       ;;
       stop)
          stop
       ;;
       status)
          status
       ;;
       *)
          echo "Usage: {start|stop|status}"
       ;;
    esac
     
    exit 0
    

    赋予可执行权限

    chmod u+x scrapyd
    
    图片.png 图片.png

    4-2、测试

    开启服务

    service scrapyd start
    

    查看状态

    service scrapyd status
    

    关闭服务

    service scrapyd stop
    
    图片.png

    五、使用scrapyd-client部署爬虫

    5-1、错误一:scrapyd-deploy无法执行,不是内部或外部命令。

    当我们在命令行中输入scrapyd-deploy时报错:scrapyd-deploy无法执行,不是内部或外部命令。

    解决方案:

    步骤1、我们需要新建一个文件,命名为:scrapyd-deploy.txt,里面写上如下几行代码:

    @echo off
    
    "E:\Development\Servers\Anaconda\Anaconda3\python.exe" "E:\Development\Servers\Anaconda\Anaconda3\Scripts\scrapyd-deploy" %*
    

    这个目录:"E:\Development\Servers\Anaconda\Anaconda3\python.exe" 的话需要根据实际安装情况,例如我的安装目录如下图所示:

    图片.png 图片.png

    步骤二、将scrapyd-deploy.txt重命名为scrapyd-deploy.bat放入到以下目录(参考以上图片我的安装目录):

    E:\Development\Servers\Anaconda\Anaconda3\Scripts\
    

    步骤三、在命令行中输入以下命令测试:

    scrapyd-deploy
    

    出现以下画面代表问题解决


    图片.png

    相关文章

      网友评论

          本文标题:爬虫实战六、Scrapy爬虫部署工具Scrapyd服务搭建

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