用Shell配合Python做了一个离线的作业控制系统,功能是有了,但是拓展性着实有点差,对小脚本小工具来说效果还可以,但是对于大型的爬虫类以及需要灵活控制的项目,可能就不太适合了。所以要用到Scrapyd。
首先呢,这玩意是应该在linux用的,抱着玩一玩的心态,我们来搞一搞。
环境
我的编码环境如下:
- OS: windows10
- Python:Python3.6
- Scrapy: Scrapy 1.5.0
- Scrapyd: 1.2.0
- Scrapyd-client: 1.1.0
具体的安装方式很简单,Python3.6自带了超好用的包管理工具pip,因此安装起来就很方便了。
1 | pip install scrapy |
经过一段时间的等待,我们环境所依赖的应该就安装好了。
修改配置
创建完项目会有scrapy.cfg文件(创建项目就不写了,创建都不会的话,先学学框架吧)
1 | [settings] |
crapyd爬虫部署服务
开启scrapyd服务
在任意目录下的打开终端,输入scrapyd
,观察是否运行成功,运行成功的话,就可以打开http://localhost:6800
看是否正常显示.
部署爬虫
服务已经开启,这个时候要记得打开scrapy.cfg
中的deploy的url参数。否则scrapy爬虫部署可能就失败了。
1 | [deploy:target] |
写好爬虫、安装好了scrapyd
和scrapd-client
后,我们可能会遇到scrapyd-deploy不是windows下的命令的问题。这是由于环境变量找不到导致的。下面有两种方法:
方法1(我没成功,网上的办法):
编辑两个文件:
- scrapy.bat文件中输入以下内容 :
1 | @echo off |
- scrapyd-deploy.bat 文件中输入以下内容:
1 | @echo off |
输入部署命令1
scrapyd-deploy target -p 项目名
按照输出信息的提示,我们只需要访问 http://localhost:6800/addversion.json 资源就可以看到具体的部署信息了。
方法2(我用的方法)
在项目的根目录下运行如下的命令1
python D:\Python3.6\Scripts\scrapyd-deploy target -p 项目名
这里的D:\Python3.6\Scripts\
是你的python安装目录,Scripts是安装目录下的一个文件夹,
- 注意前面一定要加上python,
- target是在前面
scrapy.cfg
中设置的[deploy:XXX]
,XXX就是target,中括号中:XXX
没有,现在加上去,叫什么都行,只要他们一致。 - project 是
scrapy.cfg
文件中project = 项目名
的项目名。
验证是否成功
你可以在网页上看有没有显示你的工程名字,另外在根目录下输入1
python D:\Python3.6\Scripts\scrapyd-deploy -l
就能列出你所有部署过的项目了
按照输出信息的提示,我们只需要访问 http://localhost:6800/addversion.json 资源就可以看到具体的部署信息了。
方法2结束
安装curl
本来是要作业控制了,但是windows没有curl
,所以还要安装它!
下载连接:https://curl.haxx.se/download.html
记得找windows版本啊,要是Linux系统直接一句命令就行了,我下载的时候架梯子下载的。下载完解压就好了,exe文件不是给你运行的,是把他的文件路径放到环境变量PATH里。
作业控制
scrapyd的官方文档也是很详细,我们可以通过对schedule.json
,cancle.json
等资源来实现以HTTP服务的方式控制爬虫。具体的文档为 http://scrapyd.readthedocs.io/en/latest/api.html
比如下面的开启爬虫:
1 | curl http://localhost:6800/schedule.json -d project=项目名 -d spider=爬虫名 |
然后的下面的结果就说明已经成功开启了一个爬虫。
1 |
|
这里的jobid比较重要,下面会用到这个取消爬虫
查看具体的爬虫运行信息了: http://localhost:6800/jobs
点击“ Log
”超链接,就可以看到爬虫的具体的输出信息了。
- 取消爬虫:
1
curl http://localhost:6800/cancel.json -d project=myproject -d job=jobid
jobid
就是上面的提到过的,如果取消我的这个实例代码如:1
curl http://localhost:6800/cancel.json -d project=项目名 -d job=3013f9d1283611e79a63acb57dec5d04
那么它的状态就会变成如下:
1 | {"status": "ok", "prevstate": "running", "node_name": "DESKTOP-L78TJQ7"} |
- 列出项目:
1
curl http://localhost:6800/listprojects.json
,下面将会出现你已经部署的项目
删除项目:
1
curl http://localhost:6800/delproject.json -d project=myproject
列出版本:
1
curl http://localhost:6800/listversions.json?project=myproject
,这里的project
是项目的名字,是在scrapy.cfg
设置的
- 列出爬虫:
1
curl http://localhost:6800/listspiders.json?project=myproject
这里的project
是项目的名字,是在scrapy.cfg
设置的
- 列出job:
1
curl http://localhost:6800/listjobs.json?project=myproject
这里的project
是项目的名字,是在scrapy.cfg
设置的
- 删除版本:
1
curl http://localhost:6800/delversion.json -d project=myproject -d version=r99
,这里的version
是自己的项目版本号,在删除之前需要查看版本号
总结
scrapyd就是一个底层使用了twisted
的集成了的IPC服务套件(注意即使是同一个spider,两次run也要放到不同的JOBDIR,具体可以参考文档),很方便。然而自己去实现的话,对这块的内容也会理解的更深刻。