当前位置: 首页 > 工具软件 > Scrapyd > 使用案例 >

Scrapyd参考文档

仰城
2023-12-01

Scrapyd参考文档 1.2.0

翻译:超级原子
原文链接:https://scrapyd.readthedocs.io/en/stable/
原文作者:Scrapy group
水平有限,难免有误,仅供参考,欢迎不吝指正,邮箱superatom@sohu.com
版本1.2.0
Scrapyd是一个部署和运行Scrpay爬虫的应用,可以部署(上传)项目并且通过JSON API对爬虫进行控制。

概述

项目和版本

Scrapyd可以同时管理多个项目的多个版本,但运行时只能启动最新的版本。为了方便进行版本的控制,这里使用与版本管理工具一致的版本号规则,如:r23。版本号不按字符顺序而是使用更聪明的计算规则(类似distutils),所以r10大于r9

Scrapyd如何工作

Scrapyd是一个典型的守护模式的应用,响应运行爬虫的请求并为每个爬虫创建一个进程。基本的运行命令:

scrapyd crawl myspider

Scrapyd可以利用多个处理器并行处理,可以根据max_proc和max_proc_per_cpu选项决定加载的数量。
为了调度和管理进程,Scrapyd提供了JSON web service用于上传新的项目版本(eggs)并生成执行计划。这个特性是个可选项,可以禁用或者实现一个自定义的Scrapyd。这是个可插拔和修改的组件,如果你熟悉Twisted Application框架的话,可以对它进行修改。
从版本0.11开始,Scrapyd也同时提供了一个简单的web界面。

启动Scrapyd

通过命令可以启动scrapyd服务:

scrapyd

应该可以看到scrapyd已经启动。

调度一个爬虫运行

调度一个爬虫运行:

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

更多的资源请参考:API

Web接口

Scrapyd提供了一个简版的web界面(可以监控运行的进程并查看日志),可以通过http://localhost:6800/访问。

安装

这部分内容介绍如何安装配置Scrapyd以及如何部署运行Scrapy爬虫。

要求

Scrapyd依赖下列的库,但是安装进程会保证一致性:
Python2.6或更高
Twisted8.0或更高
Scrapy0.17或更高

安装Scrapyd(通用方式)

如何在目标平台上安装Scrapyd的依赖项,通用的方式就是从PyPI安装:

pip install scrapyd

如果要在Ubuntu上部署,Scrapyd有官方的包可以把Scrapyd安装为Ubuntu的系统服务,便于系统管理的工作。
其他的操作系统(Windows,Mac OS X)没有相应的包,若要运行于系统服务,需要安装后进行一些额外的配置。非常欢迎贡献你部署的平台的Scrapyd的包,只需在Github上发送一个推的请求。

在Ubuntu上安装Scrapyd

Scrapyd提供了官方的用于Ubuntu服务器的包,它们与Scrapy的APT repos一起发布,如果已经添加了Scrapy的APT repos就可以使用apt-get安装Scrapyd:
apt-get install scrapyd
执行后,Scrapyd将安装到Ubuntu服务器并创建一个运行Scrapyd的用户scrpay,同时还会创建下面的文件和文件夹:

/etc/scrapyd
Scrapyd用于存放scrpayd的配置文件,参考配置文件。
/var/log/scrapyd/scrapyd.log
Scrapyd主日志文件。
/var/log/scrapyd/scrapyd.out
Scrapyd进程及其子进程的标准输出。
/var/log/scrapyd/scrapyd.err
Scrapy进程及其子进程的错误输出。如果有问题可以检查这个文件,因为很多错误不会输出到scrapyd.log文件。
/var/log/scrapyd/project
除了主日志文件外,Scrapyd为每个爬取进程创建一个日志文件:
/var/log/scrapyd/PROJECT/SPIDER/ID.log
ID是爬虫运行的唯一ID
/var/lib/scrapyd/
用于存放数据文件(上传的eggs和爬虫队列)。

部署项目

部署项目时需要先打成eggs包,可以手动通过addversion.json进行上传,但是最简单的方法是使用scrapyd-client的scrapyd-deploy工具进行操作。

API

下面内容主要介绍Scrapyd JSON API的可用资源

daemonstatus.json

检查服务的加载状态

  • 支持的请求方法:GET

请求示例:

curl http://localhost:6800/daemonstatus.json

返回示例:

{ “status”: “ok”, “running”: “0”, “pending”: “0”, “finished”: “0”, “node_name”: “node-name” }

addversion.json

为项目添加一个版本,如果项目不存在则创建一个。

  • 支持的请求方法:POST
  • 参数:
    -project(字符串,必须)-项目的名称
    -version(字符串,必须)-项目的版本号
    -egg(文件,必须)-包含项目代码的Python egg包

请求示例:

$ curl http://localhost:6800/addversion.json -F project=myproject -F version=r23 -F egg=@myproject.egg

返回示例:

{“status”: “ok”, “spiders”: 3}

注意: Scrapyd使用disutils Loose Version来解释版本号
缺省的情况下,都会使用项目的最新版本,但Schedule.json和listspiders.json也允许明确的指定项目的版本

schedule.json

对爬虫任务进行调度(包括已有的任务),返回任务id。

  • 支持的请求方法:POST
    参数:
    : project(字符串,必选)项目名称
    -spider(字符串,必选)爬虫名称
    -setting(字符串,可选)运行爬虫时的Scrapy设置
    -jobid(字符串,可选)任务的唯一标识,缺省产生的UUID
    -_version(字符串,可选)要使用的项目的版本
    -any爬虫使用的其他参数

请求示例:

$ curl http://localhost:6800/schedule.json -d project=myproject -d spider=somespider

返回示例:

{“status”: “ok”, “jobid”: “6487ec79947edab326d6db28a2d86511e8247444”}

下面请求的例子通过指定爬虫的一个参数(arg1)并设置DOWNLOAD_DELAY参数:

$ curl http://localhost:6800/schedule.json -d project=myproject -d spider=somespider -d setting=DOWNLOAD_DELAY=2 -d arg1=val1

注意: 使用scrapyd调度的爬虫应该可以接收任意数量的参数,因为scrapyd会将内部生成的参数发送给正在调度的爬虫。

cancel.json

从0.15版本开始支持的特性
取消一个爬虫的运行(aka任务),如果任务正在等待期,将直接被移除;如果任务正在运行,将被结束。

  • 支持的请求方法:POST
    参数:
    -project(字符串,必选)项目名称
    -job(字符串,必选)任务的id

请求示例:

$ curl http://localhost:6800/cancel.json -d project=myproject -d job = 6487ec79947edab326d6db28a2d86511e8247444

返回示例:

{“status”: “ok”, “prevstate”: “running”}

listprojects.json

获取已经上传到服务器的项目列表

  • 支持的请求方法:GET
    参数:无

请求示例:

$ curl http://localhost:6800/listprojects.json

返回示例:

{“status”: “ok”, “projects”: [“myproject”, “otherproject”]}

listversions.json

获取项目的可用版本列表,按照版本的顺序返回,最后一个是当前版本。

  • 支持的请求方法:GET
    参数:
    -project(字符串,必选)项目名称

请求示例:

$ curl http://localhost:6800/listversions.json?project=myproject

返回示例:

{“status”: “ok”, “versions”: [“r99”, “r156”]}

listspiders.json

获取项目爬虫的最后版本(覆盖的除外)

  • 支持的请求方法:GET
    参数:
    -project(字符串,必选)项目的名称
    -_version(版本,可选)指定项目的版本

请求示例:

$ curl http://localhost:6800/listspiders.json?project=myproject

返回示例:

{“status”: “ok”, “spiders”: [“spider1”, “spider2”, “spider3”]}

listjobs.json

从0.15版本开始支持
获取项目的任务,包括等待、运行和完成的任务

  • 支持的请求方法:GET
    参数:
    -project(字符串,必选)项目的名称

请求示例:

$ curl http://localhost:6800/listjobs.json?project=myproject

返回示例:

{“status”: “ok”,“pending”: [{“id”: “78391cc0fcaf11e1b0090800272a6d06”, “spider”: “spider1”}],“running”: [{“id”: “422e608f9f28cef127b3d5ef93fe9399”, “spider”: “spider2”, “start_time”: “2012-09-12 10:14:03.594664”}],“finished”: [{“id”: “2f16646cfcaf11e1b0090800272a6d06”, “spider”: “spider3”, “start_time”: “2012-09-12 10:14:03.594664”, “end_time”: “2012-09-12 10:24:03.594664”}]}

注意: 所有的任务的信息都在内存里,如果服务重启,数据就被重置了。参见问题12。

delversion.json

删除项目的某个版本,如果删除后项目没有多余的版本,项目也将被同时删除

  • 支持的请求方法:POST
    参数:
    -project(字符串,必选)项目名称
    -version(字符串,必选)项目版本号

请求示例:

$ curl http://localhost:6800/delversion.json -d project=myproject -d version=r99

返回示例:

{“status”: “ok”}

delproject.json

删除一个项目和该项目的所有版本

  • 支持的请求方法:POST
    参数:
    -project(字符串,必选)项目名称

请求示例:

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

返回示例:

{“status”: “ok”}

配置文件

Scrapyd从下面的位置搜索配置文件,并按照顺序进行解析,最后的优先级最高。

  • /etc/scrapyd/scrapyd.conf (Unix)
  • c:\scrapyd\scrapyd.conf (Windows)
  • /etc/scrapyd/conf.d/* (按字母顺序, Unix)
  • scrapyd.conf
  • ~/.scrapyd.conf (用户的home文件夹)

配置文件支持下面的选项(缺省值可参考示例)

http_port

HTTP JSON API侦听的TCP端口号,缺省端口6800。

bind_address

json web服务站点的IP地址,缺省未127.0.0.1(localhost)。

max_proc

每个CPU上同时处理的最大任务数量,缺省值是4。

debug

是否开启调试模式,缺省值是off。启用调式模式后,调用JSON API失败后会返回完整的(明文回复)Python跟踪信息。

eggs_dir

项目包的存放位置

dbs_dir

项目数据库的存放位置(包括爬虫队列)

log_dir

Scrapy日志的存放位置,可以选择不记录日志,空着就可以了,如下:

logs_dir=

items_dir

从0.15版本开始支持
爬虫结果条目Item的存放位置,该选项缺省为不可用因为通常会把爬取的结果存放到出去库或用exporter输出。该参数不为空时,爬取结果条目将根据FEED_URI参数的设置存储到指定的文件夹。

jobs_to_keep

从0.15版本开始支持
每个爬虫完成后保持的任务数。缺省值为5。主要是指日志和条目。在以前的版本中对应的参数为logs_to_keep。

finished_to_keep

从版本0.14开始支持
处理完成后在启动器中保持的数量。缺省值为100。该选项只涉及网站/任务及相关的json web服务。

poll_interval

队列检查的间隔时间,单位为秒,缺省是5.0秒,支持小数,如:0.2。

runner

用于启动子进程的模块,可以自定义爬虫的启动进程。

application

用于返回要使用的(Twisted)应用对象,可用于对Scrapyd服务进行扩展,增加说移除自定义的组件或服务
更多信息可以参考Twisted Application Framework(Twisted应用框架)

webroot

twisted web资源,展示scrapyd的用户界面,Scrapyd提供了一个简单的用户系欸按可以监控和访问应用的web资源。这个设置必须提供twisted web资源的root class。

node_name

从1.1版本开始支持
每个节点的名称,比如主机名,缺省位${socket.gethostname()}。

配置文件的例子

下面是一个缺省的配置文件的示例:

[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.0
bind_address = 127.0.0.1
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

贡献

重要: 可以阅读Scrapy贡献文档,了解关打补丁、报告缺陷、代码风格等有关的内容。
下面介绍如何设置和为Scrapyd做贡献

报告问题和缺陷

报告需要提交到Scrapyd在GitHub上的问题跟踪

测试

测试使用Twisted单元测试框架。Scrapyd使用trial作为测试运行程序

运行测试

要运行所有的测试,可以进入Scrapyd源代码的根路径,执行:

trial scrapyd

要运行指定的测试(如:tests/test_poller.py),执行:

trial scrapyd.tests.test_poller

写单元测试

所有的功能(包括新特性和缺陷修复)需要用一个测试用例对期待的结果进行验证。所以,如果要想更快的接收你提交的补丁,请一定要在补丁里包含测试用例。
Scrapyd使用的单元测试文件放在srapyd/test文件夹下。他们的模块名称通常使用被测试模块的全路径,例如:调度器代码在:

scrapyd.scheduler

他们的单元测试为:

scrapyd/tests/test_scheduler.py

本地安装

要在本地安装已经修改的Scrapyd进行测试或使用,可以在项目根目录下运行:

pip install -e

时间仓促,发布说明部分没有翻
翻译:超级原子
原文链接:https://scrapyd.readthedocs.io/en/stable/
水平有限,难免有误,仅供参考,欢迎不吝指正,邮箱superatom@sohu.com

 类似资料: