翻译:超级原子
原文链接: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 crawl myspider |
---|
Scrapyd可以利用多个处理器并行处理,可以根据max_proc和max_proc_per_cpu选项决定加载的数量。
为了调度和管理进程,Scrapyd提供了JSON web service用于上传新的项目版本(eggs)并生成执行计划。这个特性是个可选项,可以禁用或者实现一个自定义的Scrapyd。这是个可插拔和修改的组件,如果你熟悉Twisted Application框架的话,可以对它进行修改。
从版本0.11开始,Scrapyd也同时提供了一个简单的web界面。
通过命令可以启动scrapyd服务:
scrapyd |
---|
应该可以看到scrapyd已经启动。
调度一个爬虫运行:
$ curl http://localhost:6800/schedule.json -d project=myproject -d spider=spider2 |
---|
{“status”: “ok”, “jobid”: “26d1b1a6d6f111e0be5c001e648c57f8”} |
更多的资源请参考:API
Scrapyd提供了一个简版的web界面(可以监控运行的进程并查看日志),可以通过http://localhost:6800/访问。
这部分内容介绍如何安装配置Scrapyd以及如何部署运行Scrapy爬虫。
Scrapyd依赖下列的库,但是安装进程会保证一致性:
Python2.6或更高
Twisted8.0或更高
Scrapy0.17或更高
如何在目标平台上安装Scrapyd的依赖项,通用的方式就是从PyPI安装:
pip install scrapyd |
---|
如果要在Ubuntu上部署,Scrapyd有官方的包可以把Scrapyd安装为Ubuntu的系统服务,便于系统管理的工作。
其他的操作系统(Windows,Mac OS X)没有相应的包,若要运行于系统服务,需要安装后进行一些额外的配置。非常欢迎贡献你部署的平台的Scrapyd的包,只需在Github上发送一个推的请求。
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工具进行操作。
下面内容主要介绍Scrapyd JSON API的可用资源
检查服务的加载状态
请求示例:
curl http://localhost:6800/daemonstatus.json |
---|
返回示例:
{ “status”: “ok”, “running”: “0”, “pending”: “0”, “finished”: “0”, “node_name”: “node-name” } |
---|
为项目添加一个版本,如果项目不存在则创建一个。
请求示例:
$ 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也允许明确的指定项目的版本
对爬虫任务进行调度(包括已有的任务),返回任务id。
请求示例:
$ 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会将内部生成的参数发送给正在调度的爬虫。
从0.15版本开始支持的特性
取消一个爬虫的运行(aka任务),如果任务正在等待期,将直接被移除;如果任务正在运行,将被结束。
请求示例:
$ curl http://localhost:6800/cancel.json -d project=myproject -d job = 6487ec79947edab326d6db28a2d86511e8247444 |
---|
返回示例:
{“status”: “ok”, “prevstate”: “running”} |
---|
获取已经上传到服务器的项目列表
请求示例:
$ curl http://localhost:6800/listprojects.json |
---|
返回示例:
{“status”: “ok”, “projects”: [“myproject”, “otherproject”]} |
---|
获取项目的可用版本列表,按照版本的顺序返回,最后一个是当前版本。
请求示例:
$ curl http://localhost:6800/listversions.json?project=myproject |
---|
返回示例:
{“status”: “ok”, “versions”: [“r99”, “r156”]} |
---|
获取项目爬虫的最后版本(覆盖的除外)
请求示例:
$ curl http://localhost:6800/listspiders.json?project=myproject |
---|
返回示例:
{“status”: “ok”, “spiders”: [“spider1”, “spider2”, “spider3”]} |
---|
从0.15版本开始支持
获取项目的任务,包括等待、运行和完成的任务
请求示例:
$ 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。
删除项目的某个版本,如果删除后项目没有多余的版本,项目也将被同时删除
请求示例:
$ curl http://localhost:6800/delversion.json -d project=myproject -d version=r99 |
---|
返回示例:
{“status”: “ok”} |
---|
删除一个项目和该项目的所有版本
请求示例:
$ curl http://localhost:6800/delproject.json -d project=myproject |
---|
返回示例:
{“status”: “ok”} |
---|
Scrapyd从下面的位置搜索配置文件,并按照顺序进行解析,最后的优先级最高。
配置文件支持下面的选项(缺省值可参考示例)
HTTP JSON API侦听的TCP端口号,缺省端口6800。
json web服务站点的IP地址,缺省未127.0.0.1(localhost)。
每个CPU上同时处理的最大任务数量,缺省值是4。
是否开启调试模式,缺省值是off。启用调式模式后,调用JSON API失败后会返回完整的(明文回复)Python跟踪信息。
项目包的存放位置
项目数据库的存放位置(包括爬虫队列)
Scrapy日志的存放位置,可以选择不记录日志,空着就可以了,如下:
logs_dir= |
---|
从0.15版本开始支持
爬虫结果条目Item的存放位置,该选项缺省为不可用因为通常会把爬取的结果存放到出去库或用exporter输出。该参数不为空时,爬取结果条目将根据FEED_URI参数的设置存储到指定的文件夹。
从0.15版本开始支持
每个爬虫完成后保持的任务数。缺省值为5。主要是指日志和条目。在以前的版本中对应的参数为logs_to_keep。
从版本0.14开始支持
处理完成后在启动器中保持的数量。缺省值为100。该选项只涉及网站/任务及相关的json web服务。
队列检查的间隔时间,单位为秒,缺省是5.0秒,支持小数,如:0.2。
用于启动子进程的模块,可以自定义爬虫的启动进程。
用于返回要使用的(Twisted)应用对象,可用于对Scrapyd服务进行扩展,增加说移除自定义的组件或服务
更多信息可以参考Twisted Application Framework(Twisted应用框架)
twisted web资源,展示scrapyd的用户界面,Scrapyd提供了一个简单的用户系欸按可以监控和访问应用的web资源。这个设置必须提供twisted web资源的root class。
从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