我的编程空间,编程开发者的网络收藏夹
学习永远不晚

经验拾忆(纯手工)=> Scrapyd

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

经验拾忆(纯手工)=> Scrapyd

我之前做的项目:一直用的 Linux的Screen会话工具+ Scrapy的JOBDIR来控制爬虫开关。
但是有后来想到用 Web 来控制爬虫的开关。所以我想到了用Scrapyd服务实现。

安装scrapyd服务

pip install scrapyd

启动scrapyd服务

scrapyd         # 就这一条shell命令即可启动服务

如果你相对爬虫服务做一些配置,(比如 log目录,绑定地址,绑定端口。。等,可修改如下配置文件):

vi /usr/lib/python3.6/site-packages/scrapyd/default_scrapyd.conf   

将爬虫程序推送到服务中

首先确保你的爬虫程序单测可以无误运行!
情况1:(爬虫程序在linux, 上面讲的scrapyd服务也在linux)
首先安装个模块:

pip install scrapyd-client

修改scrapy的scrapy.cfg文件:

[deploy:Cython_lin]               # 这个 Cython_lin 是服务名,可自定义,但后面还会用到
url = http://23.23.xx.xx:6800/    # 这是你上面启动的Scrapyd服务的 URL+PORT
project = Baidu

# 这个文件是你运行 scrapy startproject 时 自动创建的文件。 在项目根目录下, 就叫 "scrapy.cfg":

正式推送本机爬虫程序到Scrapyd:

如下有3个说明:
    1. 你需要在项目根目录下,执行这个命令
    2. Cython_lin 就是我们上面 scrapy.cfg文件 配置的服务名
    3. Baidu      就是 scrapy.cfg文件 里面的那个  project属性的值,也是 项目名
scrapyd-deploy Cython_lin -p Baidu      

情况2,番外篇(Windows开发,Linux部署)
同样安装个客户端模块(windows):

pip install scrapyd-client

修改scrapy的scrapy.cfg文件(windows):

[deploy:Cython_lin]               # 这个 Cython_lin 是服务名,可自定义,但后面还会用到
url = http://23.23.xx.xx:6800/    # 这是你上面启动的Scrapyd服务的 URL+PORT
project = Baidu

建立一个文件名为 scrapyd-deploy.bat, 内容作下(windows):
注意:这个文件是创建在python的安装路径下(如果你是虚拟环境,那么就去虚拟环境的python路径中)

@echo off
"D:\Virtualenv_All\scrapy\Scripts\python.exe" "D:\Virtualenv_All\scrapy\Scripts\scrapyd-deploy" %1 %2 %3 %4 %5 %6 %7 %8 %9

随后将刚才的路径,配置到环境变量中(如果不想设置环境变量,那么每次需要用绝对路径用scrapyd-deploy)

scrapyd-deploy Cython_lin -p Baidu

这条命令和上面(linux版本)讲的是一模一样的, 同样要在scrapy根路径下执行

前面我们已经完全将爬虫Scrapyd服务部署完成。接下来就是开启调用的环节:
scrapyd采用 "请求接口" 的方式取开启或终止爬虫:
查看爬虫状况:

curl http://23.23.xx.xx:6800/daemonstatus.json    

正式开启爬虫程序:

curl http://39.107.86.223:6800/schedule.json -d project=Baidu -d spider=zhidao

# 注意: "Baidu"是项目名,  而 "zhidao" 是每个 spider的名字 (就是主程序的爬虫名name=...)
# 注意: 开启的时候会给你一个ID, 你要记住它 ,方便我们停止

停止爬虫程序:

curl http://23.23.xx.xx:6800/cancel.json -d project=Baidu -d job=运行ID

上面我们说了用 curl 发送请求去操控爬虫的开启与暂停。但是这并不是习惯的做法。
更好的是,通过Qt 或者 通过Web, 来操控爬虫。

pip install python-scrapyd-api  # 预先安装此模块

from scrapyd_api import ScrapydAPI

scrapyd = ScrapydAPI('39.107.xx.xx:6800')   # 先获取 scrapyd远程服务的客户端连接


class SpiderView(View):       # 我使用的是 Django的 CBV
    def get(self, request):
        state_dict = scrapyd.list_jobs('Baidu')    # 列出项目所有爬虫任务,返回字典
        if request.GET.get('tag') == 'start':      # 检测爬虫是否为运行状态
            scrapyd.schedule('Baidu', 'zhidao')  # 'project_name', 'spider_name'
            return HttpResponse('0')       # 如果正在运行,给前端一个值,按钮  
        if request.GET.get('tag') == 'stop':     # 前端点下按钮如果get传值为stop
            try:
                state = state_dict['running'][0]['id']    # 若取不到,就抛异常
            except:
                return HttpResponse('-1')        # 随便返回一个值,不用处理

            scrapyd.cancel('Baidu', state)  # 根据 id取消 爬虫入伍
            return HttpResponse('0')        # 并返回0(这个0是我自定义的,前端也用的0)
        return HttpResponse('') 

其实后端接口做好了,前端就随意了。我用的 Nuxt+Vue,主要贴一下核心method吧:

methods: {
    start() {
        axios.get('http://39.xx.xx:8000/spider', {          # 注意这时请求的Django
          params: { 'tag': 'start' }
        }).then(
          (response) => {
            this.tag = Number.parseInt(response['data'])  
            if (this.tag === 0) {                            # 如果django返回值为0
              this.start_msg = '开启成功,切记不要重复开启'    # 用于vue模板提示
              this.start_unable = true                       # 把按钮禁用,防止重复请求
              this.stop_unable = false                     # 同时把停止按钮由禁用设置为激活
              this.start_layer()                   # 这个函数内部实现了消息弹框
              // this.stop_unable = false
        }
      }
    ),
    stop() {
      axios.get('http://39.107.xx.xx:8000/spider', {   # 注意这是请求的Django
        params: { 'tag': 'stop' }                # 发一个 stop参数的get请求
      }).then(
        (response) => {
          this.tag = Number.parseInt(response['data'])
          if (this.tag === 0) {                # 如果返回0, 这个0是我在Django自己指定的。
            this.stop_msg = '关闭成功,切记不要重复关闭'   
            this.start_unable= false                      # 负负得正,开始按钮激活
            this.stop_unable = true                       # 停止按钮禁用  
            this.stop_layer()                             # 无关禁用的弹窗信息
          }
        }
      )
    },   
},

如果你也想过使用docker+docker-compose (开启服务,推送代码一体化)
请看下篇: https://segmentfault.com/a/11...

我是设置2个按钮(开启、关闭互斥,点哪个哪个就被禁用,与此同时另一个按钮就会被激活)。
当然,你也可以用 单机,双击。等用一个按钮来控制开启和关闭。
当然这些只是标志性的功能。 核心功能还是 Django视图中的 ScrapydAPI 这个API的使用
python-scrapyd-api官档:https://pypi.org/project/pyth...

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

经验拾忆(纯手工)=> Scrapyd

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

经验拾忆(纯手工)=> Scrapyd

我之前做的项目:一直用的 Linux的Screen会话工具+ Scrapy的JOBDIR来控制爬虫开关。但是有后来想到用 Web 来控制爬虫的开关。所以我想到了用Scrapyd服务实现。安装scrapyd服务pip install scr
2023-01-31

经验拾忆(纯手工)=> Python-

去github搜 "python orm",最高star居然不是sqlalchemy,而是peewee后来得知peewee,比sqlalchemy简单好用。值得一学哦!!我总体感觉(peewee像 Django-ORM的分离版,,但比Dja
2023-01-31

经验拾忆(纯手工)=> docker-

踩了 5-6个小时的坑,各种测试。人要没了。不过结果我已经满意了。这篇文章是对 https://segmentfault.com/a/11... 的完善与排初BUG!我用的Docker (我记得之前不用docker的时候scrapyd的配置
2023-01-31

经验拾忆(纯手工)=> Tensorf

python & cuda & cudnn & 显卡型 & tensorflow 版本如果匹配不好,可能会踩坑。。本篇文章,讲述了 全套安装过程 与 我所踩过的坑。我也不是一次成的,当时 tf-13rc问世时,弄了好久。稍微提一下,pyth
2023-01-31

经验拾忆(纯手工)=> Python基

可变类型与不可变类型(重头戏) 基操: 可变类型:[], {} # 可增删改 查 不可变类型: int float str () # 无法增删改, 只可查 升操:
2023-01-31

经验拾忆(纯手工)=> Python三

GIL的理解GIL这个话题至今也是个争议较多的,对于不用应用场景对线程的需求也就不同,说下我听过的优点:1. 我没有用过其他语言的多线程,所以无法比较什么,但是对于I/O而言,Python的线程还是比较高效的。2. 有些第三方基于Pytho
2023-01-31

经验拾忆(纯手工)=> Flask框架

""" Flask常用 Sanic和Flask很像,于是按着Sanic官方文档学了一下,对比Flask学习并做下笔记,回顾一下"""Flask:轻量级Web框架,三方组件齐全,用时安装,扩展灵活度高。Sanic: 和Flask特
2023-01-31

经验拾忆(纯手工)=> Linux实用

Ubuntu16升级到18.04“”“ 有特殊新颖强迫症癖好可以升下,如果你觉得16.04好用,就根本没必要升了”“”我当时租的 云服务器通常都是16.04,现在估计也是16.04较多我是个Python3的玩家, 我只想用Python
2023-01-31

纯小白,备战软考该怎么做?经验分享!新手看过来!

软考因为没什么报名门槛,吸引了很多非IT人士报考……甚至不少是完全没有相关专业背景和工作经验的小白。
纯小白,备战软考该怎么做?经验分享!新手看过来!
2024-08-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录