scrapyd+SpiderKeeper+supervisord爬虫部署与管理
本文介绍在CentOS7下部署爬虫,稳定运行爬虫,对爬虫提供Web管理。部署工具是Scrapy官方的scrapyd,Web管理程序是开源项目SpiderKeeper,最后用supervisord提供稳定运行。
scrapyd和scrapyd-client
scrapyd安装配置
Scrapyd是一个用来部署和运行Scrapy项目的应用,由Scrapy的开发者开发。其可以通过一个简单的Json API来部署(上传)或者控制你的项目。Scrapyd可以用来管理多个项目,并且每个项目还可以上传多个版本,不过只有最新的版本会被使用。
scrapyd对python2.7不兼容,从源码下载 https://github.com/scrapy/scrapyd.git 安装scrapyd,改下 scrapyd的utils文件get_spider_list方法,加上str():
env['PYTHONIOENCODING'] = 'UTF-8'
env['SCRAPY_PROJECT'] = str(project)
if pythonpath:
env['PYTHONPATH'] = str(pythonpath)
if version:
env['SCRAPY_EGG_VERSION'] = str(version)
再python setup.py install
。对可能的报错处理https://www.jianshu.com/p/e6945ac9c4c8,
另外CentOS 7.2自带的Python2版本比较老,需要更新pip,更新setuptools、cryptography、pyasn1。
通过源码安装的要在包目录下配置scrapyd:
vi /usr/lib/python2.7/site-packages/scrapyd-1.2.0-py2.7.egg/scrapyd/default_scrapyd.conf
# 把jobs_to_keep改道100,否则日志默认留5条
jobs_to_keep = 100
# 修改端口为7300
bind_address = 127.0.0.1
http_port = 7300
此时,在终端scapyd
应该会得到一大段正常日志,不过我们并不这么启动,后续用supervisor运维。
参考:https://www.jianshu.com/p/2a189127901a
scrapyd-client安装配置
将Scrapy项目部署到远程服务器,首先第一步要做的就是把项目打包成egg文件,然后上传到目标服务器,这个操作使用setup-tools也是可以完成的,但比较麻烦。我们可以使用一个第三方库Scrapyd-Client来帮我们一步完成这些操作。
我们用spiderkeeper管理scrapy爬虫,spiderkeeper提供web界面上传egg文件,因此只需要在开发端安装,源码地址:https://github.com/scrapy/scrapyd-client.git
打包egg文件语法:
scrapyd-deploy --build-egg output.egg
spiderkeeper
spiderkeeper是一款开源的spider管理工具,可以方便的进行爬虫的启动,暂停,定时,同时可以查看分布式情况下所有爬虫日志,查看爬虫执行情况等功能。
这个项目是用Flask写的,我发现有一些bug,后面还想自己加功能。因此果断从git上下源码:https://github.com/DormyMo/SpiderKeeper.git
我也选择安装在Python2.7下
pip install -r requirements.txt
修改setup.py文件,去掉encoding=‘utf-8’:
with open(path.join(here, 'requirements.txt'), encoding='utf-8') as f:
all_reqs = f.read().split('\n')
我选择用Postgres做数据库,因此把SpiderKeeper源码中的相关代码都改了,为了配合supervisor启动,创建一个supervisor.sh启动。
netstat -nltp | grep :7400 | awk '{print $7}' | awk -F"/" '{ print $1 }' | xargs kill -9
# 指定scrapyd的地址是http://127.0.0.1:7300,指定spiderkeeper的地址是7400,数据库改为postgres(默认是sqlite)
python run.py --host=0.0.0.0 --port=7400 --server=http://127.0.0.1:7300 --username=sp的用户名 --password=sk的密码 --database-url=postgresql://postgres:pg的密码@localhost:pg的端口/spiderkeeper
参考:https://blog.****.net/m0_38106113/article/details/81812135
supervisord安装配置
Supervisord是一个守护进程的工具,当进程意外终止或服务器掉电起来后,希望进程能够自动运行,supervisord可以很好的为我们做这件事情。同时supervisord也自带监控界面,可以通过浏览器灵活的查看、操作。
# CentOS下安装Supervisord
yum install python-setuptools
easy_install supervisor
# 创建配置文件
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisord.conf
# 文件夹conf.d下准备用来放具体配置
mkdir /etc/supervisor/conf.d
修改配置文件/etc/supervisord.conf,找到相应行并修改
# 开启web管理界面
[inet_http_server] ; inet (TCP) server disabled by default
port=*:你的端口 ; ip_address:port specifier, *:port for all iface
username=你的用户名 ; default is no username (open server)
password=你的密码 ; default is no password (open server)
# 杀干净子进程
stopasgroup=true
killasgroup=true
# 具体配置文件路径
[include]
files=conf.d/*.conf
启动和重载
# 通过配置文件启动supervisor
supervisord -c /etc/supervisor/supervisord.conf
# 重新载入配置文件
supervisorctl -c /etc/supervisor/supervisord.conf reload
参考:http://www.qttc.net/201308366.html
效果!
实际使用中,发现scapyd很稳定,开源项目SpiderKeeper等Web项目就比较捉急了,紧急情况很需要supervisord远程重启。
当Scrapy项目写好后,编辑需要部署的项目的scrapy.cfg文件:
[deploy:部署名(部署名可以自行定义)]
url = http://127.0.0.1:7300/
project = 项目名(创建爬虫项目时使用的名称)
打包成egg文件:
scrapyd-deploy --build-egg output.egg
打开SpiderKeeper的deploy界面并上传,就能正常使用了。
这一套搭配很适合有较多定时爬虫运行的需求,跟用Celery管理爬虫相比,学习成本也比较低,修补了SpiderKeeper的一些Bug后,亲测每天能稳定运行。