使用scrapyd 管理爬虫

scrapyd 是由scrapy 官方提供的爬虫管理工具,使用它我们可以非常方便地上传、控制爬虫并且查看运行日志。

参考官方文档

http://scrapyd.readthedocs.org/en/latest/api.html

使用scrapyd 和我们直接运行

scrapy crawl myspider

有什么区别呢?

scrapyd 同样是通过上面的命令运行爬虫的,不同的是它提供一个JSON web service 监听的请求

我们可以从任何一台可以连接到服务器的电脑发送请求安排爬虫运行,或者停止正在运行的爬虫。

甚至,我们可以使用它提供的API上传新爬虫而不必登录到服务器上进行操作。

安装scrapyd

pip install scrapyd

参考文档:

https://github.com/scrapy/scrapyd-client

运行scrapyd 服务

直接运行命令scrapyd即可:

scrapyd

默认情况下scrapyd 监听 0.0.0.0:6800 端口,运行scrapyd 后在浏览器http://localhost:6800/ 即可查看到当前可以运行的项目:

  • web接口

http://localhost:6800/

部署scrapy 项目

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

pip install scrapyd-client

直接在项目根目录:

修改工程目录下的 scrapy.cfg 文件

[deploy:scrapyd2]   #默认情况下并没有scrapyd2,它只是一个名字,可以在配置文件中写多个名字不同的deploy
url = http://scrapyd.mydomain.com/api/scrapyd/  #要部署项目的服务器的地址
username = john  #访问服务器所需的用户名和密码(如果不需要密码可以不写)
password = secret

其中的username 和 password 用于在部署时验证服务器的HTTP basic authentication,须要注意的是这里的用户密码并不表示访问该项目须要验证,而是登录服务器用的。

Ubuntu/Windows:

[deploy:tutorial_deploy]
url = http://192.168.17.129:6800/
project = tutorial
username = enlong
password = test

部署项目到服务器

直接在项目根目录:

Windows:

python c:\Python27\Scripts\scrapyd-deploy

Ubuntu:

scrapyd-deploy tutorial_deploy -p tutorial

部署操作会打包你的当前项目,如果当前项目下有setup.py文件,就会使用它,没有的会就会自动创建一个。

(如果后期项目需要打包的话,可以根据自己的需要修改里面的信息,也可以暂时不管它).

从返回的结果里面,可以看到部署的状态,项目名称,版本号和爬虫个数,以及当前的主机名称.

查看项目spider

通过scrapyd-deploy -l 查看当前目录下的可以使用的部署方式(target)

Windows/Ubuntu

scrapy list
scrapyd-deploy -l

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

列出服务器上所有的项目,检查tutorial_deploy是否已经部署上去了:

scrapyd-deploy -L tutorial_deploy
default
tutorial

API

scrapyd的web界面比较简单,主要用于监控,所有的调度工作全部依靠接口实现.

参考官方文档

http://scrapyd.readthedocs.org/en/stable/api.html

开启爬虫 schedule

curl http://localhost:6800/schedule.json -d project=tutorial -d spider=tencent

Windows/Ubuntu 注意:执行时 cd 到项目根目录执行

curl http://localhost:6800/schedule.json -d project=tutorial -d spider=tencent
{"status": "ok", "jobid": "94bd8ce041fd11e6af1a000c2969bafd", "node_name": "ubuntu"}

停止 cancel

curl http://localhost:6800/cancel.json -d project=tutorial -d job=94bd8ce041fd11e6af1a000c2969bafd

列出爬虫

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

删除项目

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

更新

对于scrapyd默认项目(即是启动scrapyd命令后看到的default项目):

只有在scrapy项目里启动scrapyd命令时才有默认项目,默认项目就是当前的scrapy项目

如果在非scrapy项目下执行scrapyd, 是看不到default的

注意:执行时 cd 到项目根目录执行

第一种情况

cfg:

[deploy]
url = http://192.168.17.129:6800/
project = tutorial
username = enlong
password = test

运行结果:

python@ubuntu:~/project/tutorial$ scrapyd-deploy 
Packing version 1471069533
Deploying to project "tutorial" in http://192.168.17.129:6800/addversion.json
Server response (200):
{"status": "ok", "project": "tutorial", "version": "1471069533", "spiders": 1, "node_name": "ubuntu"}

第二种情况

cfg:

[deploy:tutorial_deploy]
url = http://192.168.17.129:6800/
project = tutorial
username = enlong
password = test

运行结果:

python@ubuntu:~/project/tutorial$ scrapyd-deploy tutorial_deploy
Packing version 1471069591
Deploying to project "tutorial" in http://192.168.17.129:6800/addversion.json
Server response (200):
{"status": "ok", "project": "tutorial", "version": "1471069591", "spiders": 1, "node_name": "ubuntu"}