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
运行scrapy出现-bash: scrapyd: command not found 错误的解决办法:
- 进入 PYTHON_HOME\bin 目录查看 scrapyd 命令是否存在;
- 为scrapyd命令创建软连接 ln -s PYTHON_HOME/bin/scrapyd /usr/bin/scrapyd
默认情况下scrapyd 监听 127.0.0.1:6800
端口,运行scrapyd 后在浏览器 http://localhost:6800/
即可查看到当前可以运行的项目:
如果需要远程访问Web界面,需要修改一下 /etc/scrapyd/scrapyd.conf 配置,内容如下:
[scrapyd]
eggs_dir = eggs
logs_dir = logs
items_dir =
jobs_to_keep = 5
dbs_dir = dbs
max_proc = 0
max_proc_per_cpu = 10
finished_to_keep = 100
poll_interval = 5.0
bind_address = 0.0.0.0
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-client
提供的scrapyd-deploy
工具。
pip install scrapyd-client
直接在项目根目录,修改工程目录下的 scrapy.cfg 文件:
[deploy:slaver1] #默认情况下并没有slaver1,它只是一个名字,可以在配置文件中写多个名字不同的deploy
url = http://scrapyd.mydomain.com/api/scrapyd/ #要部署项目的服务器的地址
username = john #访问服务器所需的用户名和密码(如果不需要密码可以不写)
password = secret
其中的username 和 password 用于在部署时验证服务器的HTTP basic authentication,须要注意的是这里的用户密码并不表示访问该项目须要验证,而是登录服务器用的。
下面是一个配置示例:
[settings]
default = tianmao.settings
[deploy:slaver1]
url = http://localhost:6800/
project = tianmao
[deploy:slaver2]
url = http://172.16.250.238:6800/
project = tianmao
部署项目到服务器
直接在项目根目录,执行下面命令:
scrapyd-deploy slaver1 -p tianmao
部署操作会打包你的当前项目,如果当前项目下有setup.py文件,就会使用它,没有的会就会自动创建一个。(如果后期项目需要打包的话,可以根据自己的需要修改里面的信息,也可以暂时不管它).从返回的结果里面,可以看到部署的状态,项目名称,版本号和爬虫个数,以及当前的主机名称.
查看项目spider
通过scrapyd-deploy -l 查看当前目录下的可以使用的部署方式(target)。
scrapy list
scrapyd-deploy -l
列出服务器上所有的项目,检查tutorial_deploy
是否已经部署上去了。
scrapyd-deploy -L slaver1
tianmao
API
scrapyd的web界面比较简单,主要用于监控,所有的调度工作全部依靠接口实现。
参考官方文档:http://scrapyd.readthedocs.org/en/stable/api.html
开启爬虫 schedule
curl http://localhost:6800/schedule.json -d project=tianmao -d spider=tm
注意:执行时 cd 到项目根目录执行
C:\Users\pjli\Desktop\pyworks\tianmao>curl http://localhost:6800/schedule.json -d project=tianmao -d spider=tm
{"node_name": "1000-PJLI", "status": "ok", "jobid": "4bbdd7d494f011ea99cf54e1ad47f97c"}
停止 cancel
curl http://localhost:6800/cancel.json -d project=tianmao -d job=e09e09c694f411ea8ec254e1ad47f97c
列出爬虫
curl http://localhost:6800/listspiders.json?project=tianmao
删除项目
curl http://localhost:6800/delproject.json -d project=tianmao
更新
对于scrapyd默认项目(即是启动scrapyd命令后看到的default项目):
- 只有在scrapy项目里启动scrapyd命令时才有默认项目,默认项目就是当前的scrapy项目
- 如果在非scrapy项目下执行scrapyd, 是看不到default的