scrapyd和scrapyd-client使用教程

 

原文地址:http://blog.wiseturtles.com/posts/scrapyd.html

Tags  scrapyd  scrapy  scrapyd-client By  crazygit On 2015-10-29

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

概览

项目和版本

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

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

工作原理

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

启动服务

# 注意,启动scrapyd的目录会保存整个scrapyd运行期间生成的log, item文件,所以请选择合适的位置运行该命令
$ scrapyd

调度爬虫运行

$ curl http://localhost:6800/schedule.json -d project=myproject -d spider=spider2
{"status": "ok", "jobid": "26d1b1a6d6f111e0be5c001e648c57f8"} 

web接口

http://localhost:6800/

安装

需求

  • Python 2.6+
  • Twisted 8.0+
  • Scrapy 0.17+

安装

$ pip install scrapyd

$ sudo apt-get install scrapyd

项目部署

直接使用scrapyd-client提供的scrapyd-deploy工具.

安装scrapyd-client

$ pip install scrapyd-client


windows下的scrapyd-deploy无法运行的解决办法
.进到D:/python/Scripts 目录下,创建两个新文件:
scrapy.bat
scrapyd-deploy.bat


2. 编辑两个文件:
scrapy.bat文件中输入以下内容 :
@echo off
D:\Python36\python D:\Python36\Scripts\scrapy %*


scrapyd-deploy.bat 文件中输入以下内容:
@echo off
D:\Python36\python D:\Python36\Scripts\scrapyd-deploy %*


3. 保存退出,并确保你的 D:/python 和D:/python/Scripts  都在环境变量。这样就可以正常运行scrapy-deploy命令了。

scrapyd-client工作原理

打包项目,然后调用scrapydaddversion.json接口部署项目

配置服务器信息

为了方便叙述,整个部署流程以部署豆瓣电影爬虫为例。 配置服务器和项目信息, 需要编辑scrapy.cfg文件,添加如下内容

[deploy:server-douban]
url = http://localhost:6800/

其中server-douban为服务器名称, url为服务器地址,即运行了scrapyd命令的服务器。

检查配置, 列出当前可用的服务器

$ scrapyd-deploy -l
server-douban        http://localhost:6800/

列出服务器上所有的项目, 需要确保服务器上的scrapyd命令正在执行,否则会报连接失败.首次运行的话,可以看到只有一个default项目

$ scrapyd-deploy -L server-douban
default

打开http://localhost:6800/, 可以看到Available projects: default

部署项目

在爬虫项目根目录下执行下面的命令, 其中target为上一步配置的服务器名称,project为项目名称,可以根据实际情况自己指定。

scrapyd-deploy <target> -p <project>
$ scrapyd-deploy server-douban -p douban-movies
Packing version 1446102534
Deploying to project "douban-movies" in http://localhost:6800/addversion.json
Server response (200):
{"status": "ok", "project": "douban-movies", "version": "1446102534", "spiders": 1, "node_name": "sky"} 

部署操作会打包你的当前项目,如果当前项目下有setup.py文件,就会使用它,没有的会就会自动创建一个。(如果后期项目需要打包的话,可以根据自己的需要修改里面的信息,也可以暂时不管它). 从返回的结果里面,我们可以看到部署的状态,项目名称,版本号和爬虫个数,以及当前的主机名称.

检查部署结果

$ scrapyd-deploy -L server-douban
default
douban-movies

或再次打开http://localhost:6800/, 也可以看到Available projects: default, douban-movies

我们也可以把项目信息写入到配置文件中,部署时就不用指定项目信息,编辑scrapy.cfg文件,添加项目信息

[deploy:server-douban]
url = http://localhost:6800/
project = douban-movies 

下次部署可以直接执行

$ scrapyd-deploy

如果配置了多个服务器的话,可以将项目直接部署到多台服务器

$ scrapyd-deploy -a -p <project>

指定版本号

默认情况下, scrapyd-deploy使用当前的时间戳作为版本号,我们可以使用--version来指定版本号

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

版本号的格式必须满足LooseVersion

如:

# 设置版本号为0.1
$ scrapyd-deploy server-douban -p douban-movies --version 0.1
Packing version 0.1
Deploying to project "douban-movies" in http://localhost:6800/addversion.json
Server response (200): {"status": "ok", "project": "douban-movies", "version": "0.1", "spiders": 1, "node_name": "sky"} 

如果使用了MercurialGit管理代码, 可以使用HGGIT作为version的参数,也可以将它写入scrapy.cfg文件,那么就会使用当前的reversion作为版本号。

[deploy:target]
...
version = GIT
$ cat scrapy.cfg
...
[deploy:server-douban]
url = http://localhost:6800/
project = douban-movies version = GIT # 当前版本号为r7-master $ scrapyd-deploy server-douban -p douban-movies fatal: No names found, cannot describe anything. Packing version r7-master Deploying to project "douban-movies" in http://localhost:6800/addversion.json Server response (200): {"status": "ok", "project": "douban-movies", "version": "r7-master", "spiders": 1, "node_name": "sky"} 

关于从GIT获取版本号的方式,可以参看scrapyd-client源码部分

  elif version == 'GIT':
        p = Popen(['git', 'describe'], stdout=PIPE) d = p.communicate()[0].strip('\n') if p.wait() != 0: p = Popen(['git', 'rev-list', '--count', 'HEAD'], stdout=PIPE) d = 'r%s' % p.communicate()[0].strip('\n') p = Popen(['git', 'rev-parse', '--abbrev-ref', 'HEAD'], stdout=PIPE) b = p.communicate()[0].strip('\n') return '%s-%s' % (d, b) 

服务器添加认证信息

我们也可以在scrapyd前面加一层反向代理来实现用户认证。以nginx为例, 配置nginx

server {
       listen 6801;
       location / { proxy_pass http://127.0.0.1:6800/; auth_basic "Restricted"; auth_basic_user_file /etc/nginx/htpasswd/user.htpasswd; } } 

/etc/nginx/htpasswd/user.htpasswd里设置的用户名和密码都是test 修改配置文件,添加用户信息信息

...
[deploy:server-douban]
url = http://localhost:6801/
project = douban-movies
version = GIT
username = test
password = test

注意上面的url已经修改为了nginx监听的端口。

提醒: 记得修改服务器上scrapyd的配置bind_address字段为127.0.0.1,以免可以从外面绕过nginx, 直接访问6800端口。 关于配置可以参看本文后面的配置文件设置.

API

scrapyd的web界面比较简单,主要用于监控,所有的调度工作全部依靠接口实现. 具体可以参考官方文档

常用接口:

  • 调度爬虫

    $ curl http://localhost:6800/schedule.json -d project=myproject -d spider=somespider
    # 带上参数
    $ curl http://localhost:6800/schedule.json -d project=myproject -d spider=somespider -d setting=DOWNLOAD_DELAY=2 -d arg1=val1 
  • 取消

    $ curl http://localhost:6800/cancel.json -d project=myproject -d job=6487ec79947edab326d6db28a2d86511e8247444
    
  • 列出项目

    $ curl http://localhost:6800/listprojects.json
    
  • 列出版本

    $ curl http://localhost:6800/listversions.json?project=myproject
    
  • 列出爬虫

    $ curl http://localhost:6800/listspiders.json?project=myproject
    
  • 列出job

    $ curl http://localhost:6800/listjobs.json?project=myproject
    
  • 删除版本

    $ curl http://localhost:6800/delversion.json -d project=myproject -d version=r99
    
  • 删除项目

    $ curl http://localhost:6800/delproject.json -d project=myproject
    

配置文件

scrapyd启动的时候会自动搜索配置文件,配置文件的加载顺序为

  • /etc/scrapyd/scrapyd.conf
  • /etc/scrapyd/conf.d/*
  • scrapyd.conf
  • ~/.scrapyd.conf

最后加载的会覆盖前面的设置

默认配置文件如下, 可以根据需要修改

[scrapyd]
eggs_dir    = eggs
logs_dir    = logs items_dir = items jobs_to_keep = 5 dbs_dir = dbs max_proc = 0 max_proc_per_cpu = 4 finished_to_keep = 100 poll_interval = 5 http_port = 6800 debug = off runner = scrapyd.runner application = scrapyd.app.application launcher = scrapyd.launcher.Launcher [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 

关于配置的各个参数具体含义,可以参考官方文档

更新

上面的对于scrapyd默认项目(即是启动scrapyd命令后看到的default项目.)的理解有些错误,只有在scrapy项目里启动scrapyd命令 时才有默认项目,默认项目就是当前的scrapy项目,如果在非scrapy项目下执行scrapyd, 是看不到default的,  在爬虫里项目里直接使用scrapyd命令的好处是: 直接通调度爬虫运行, 比较适用于当前爬虫项目代码结构不规范,没法Eggifying的情况,因为在使用scrapyd-client部署爬虫的前提就是爬虫项目必须满足下面的条件:

Deploying your project to a Scrapyd server typically involves two steps:

  • Eggifying your project. You’ll need to install setuptools for this. See Egg Caveats below.
  • Uploading the egg to the Scrapyd server through the addversion.json endpoint.

小结

关于scrapyd,个人感觉比较适合单机部署爬虫和调度使用,分布式的爬虫调度可能不太合适,需要每台机器上都启动这样一个服务,日志也没有办法集中,用jenkins来做可能更合适.

转载于:https://www.cnblogs.com/yijian001/p/9051124.html

### 回答1: DICOMweb是一个用于医学影像数据传输和交换的标准协议,它基于Web技术,并且可以通过HTTP协议在网络上传输DICOM图像和相关信息。dicomweb-client是一个用于访问DICOMweb服务的客户端工具。下面是关于dicomweb-client的简单教程。 首先,为了使用dicomweb-client,我们需要安装Node.js运行环境。Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它可以让我们在命令行中运行JavaScript脚本。 安装完成后,我们需要使用npm(Node.js的包管理器)来安装dicomweb-client。在命令行中运行以下命令: ``` npm install dicomweb-client ``` 安装完成后,我们可以在JavaScript脚本中使用dicomweb-client来访问DICOMweb服务。首先,我们需要导入dicomweb-client模块: ```javascript const { DICOMwebClient } = require('dicomweb-client'); ``` 然后,我们可以实例化一个DICOMwebClient对象来连接DICOMweb服务器: ```javascript const client = new DICOMwebClient({ url: 'http://your_dicomweb_server_url', }); ``` 接下来,我们可以使用DICOMwebClient对象的方法来执行各种操作。例如,我们可以使用retrieveStudies方法来检索指定患者的研究(study)列表: ```javascript client.retrieveStudies({ queryParams: { PatientID: '1234567890', }, }).then((result) => { console.log(result); }).catch((error) => { console.error(error); }); ``` 这样,我们就可以通过DICOMweb服务检索患者的研究列表,并将结果打印到控制台。 除了检索研究,dicomweb-client还提供了其他功能,如检索系列(series)、检索图像(instance)等。 综上所述,dicomweb-client是一个使用Node.js的DICOMweb客户端工具,它使我们能够通过HTTP协议访问DICOMweb服务,并执行各种操作。通过掌握dicomweb-client的使用,我们可以方便地处理和交换医学影像数据。 ### 回答2: DICOMweb-client是一个用于访问和获取医学图像和信息通信的开源工具。它是一个基于Web的应用程序,可以通过HTTP协议与DICOMweb服务器进行通信,并在浏览器中显示和处理医学影像数据。 Dicomweb-client提供了一套简单易用的API,使开发人员可以轻松地将医学图像集成到自己的应用程序中。使用该工具,用户可以实现DICOM图像的检索、显示、存储和传输等各种功能。 Dicomweb-client使用教程分为以下几个主要部分: 1. 环境设置:首先,我们需要在本地环境中安装和配置dicomweb-client。这包括安装Node.js和NPM,下载dicomweb-client的代码,并进行一些配置。 2. 连接DICOMweb服务器:在这一步中,我们需要将dicomweb-client配置为连接到相应的DICOMweb服务器。这包括指定服务器的地址、端口号和遵循的DICOMweb协议版本。 3. DICOM图像的检索:通过dicomweb-client,我们可以使用DICOMweb协议实现对DICOM图像的检索。用户可以根据各种检索条件(如患者ID、日期、模态等)来搜索和获取特定的图像数据。 4. 图像显示和处理:一旦我们成功检索到DICOM图像,我们可以使用dicomweb-client在浏览器中显示这些图像。它提供了图像浏览和操作的功能,比如放大、缩小、旋转和窗宽窗位等。 5. 图像的存储和传输:通过dicomweb-client,我们可以将图像数据存储到本地系统中,或者将其传输到其他DICOMweb服务器。这使得我们可以方便地在不同的系统之间共享和交换医学影像数据。 总而言之,dicomweb-client教程提供了一个指导开发人员使用DICOMweb协议访问和处理医学图像的步骤。它使得开发者能够更加轻松地集成DICOM图像到自己的应用程序中,并实现各种图像处理和数据传输的功能。 ### 回答3: dicomweb-client是一个用于与DICOM Web服务器进行通信的工具。它用于检索、存储和传输医学图像和相关信息。 dicomweb-client教程可以帮助用户学习如何使用dicomweb-client工具与DICOM Web服务器进行交互。教程通常会涵盖以下内容: 1. 安装和配置dicomweb-client:教程将提供如何下载、安装和配置dicomweb-client工具的详细说明。这包括设置所需的环境变量、配置文件和认证信息等。 2. 连接DICOM Web服务器:教程将介绍如何使用dicomweb-client建立与DICOM Web服务器的连接。这可能涉及到输入服务器的URL、端口号和身份验证凭据等。 3. 检索医学图像和相关信息:教程将演示如何使用dicomweb-client从DICOM Web服务器检索医学图像和相关信息。这可能包括指定检索条件、过滤结果和处理返回的数据等。 4. 存储医学图像和相关信息:教程将展示如何使用dicomweb-client将医学图像和相关信息存储到DICOM Web服务器。这可能涉及到指定存储位置、格式转换和处理存储结果等。 5. 其他功能和高级用法:教程还可能介绍其他功能和高级用法,如显示DICOM图像、处理DICOM标记、执行DICOM操作和导出数据等。 通过学习dicomweb-client教程,用户可以更好地理解和使用dicomweb-client工具,从而更有效地与DICOM Web服务器进行交互,并在医学图像和相关信息的处理和传输方面取得良好的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值