使用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"}