**
0理论
**
以下内容摘自框架设计
pyspider 的架构主要分为 scheduler(调度器), fetcher(抓取器), processor(脚本执行):
-
各个组件间使用消息队列连接,除了 scheduler 是单点的,fetcher 和 processor
都是可以多实例分布式部署的。scheduler 负责整体的调度控制
-
任务由 scheduler 发起调度,fetcher 抓取网页内容, processor执行预先编写的 python
脚本,输出结果或产生新的提链任务(发往 scheduler),形成闭环。
-
每个脚本可以灵活使用各种 python 库对页面进行解析,使用框架 API 控制下一步抓取动作,通过设置回调控制解析动作。
-
意思就是,如果我们想要进行分布式的运行,那么我们需要公用 master 的 scheduler ,其他 slave 机子只需要跑自己的 fetcher 和 processor 即可
**
1.环境
**
系统版本:Linux 3.10.0-957.el7.x86_64
python版本:centos自带python2.7
更换镜像源请移步:https://blog.csdn.net/inslow/article/details/54177191
**
2.搭建
**
下载依赖:yum install -y ncurses-devel openssl openssl-devel zlib-devel gcc make glibc-devel libffi-devel glibc-static glibc-utils sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-deve
脚本安装和升级pip(已安装pip可忽略)
wget https://bootstrap.pypa.io/get-pip.py
$ python get-pip.py
$ pip -V ##查看pip版本
**
3.安装依赖库
**
##直接安装
pip install pyspider
pip install mysql-connector
pip install redis
pip install pymongo
pip install six
systemctl stop firewalld
##此时启动pyspider,关闭防火墙即访问localhost:5000可看到webui页面
**
4.安装Supervisor
**
##管理多个进程,推荐使用Supervisor监控
yum install supervisor -y
##若提示没有可用软件包 supervisor,则需要添加阿里的epel源。
vim /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=http://mirrors.aliyun.com/epel/7/$basearch
http://mirrors.aliyuncs.com/epel/7/$basearch
failovermethod=priority
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
baseurl=http://mirrors.aliyun.com/epel/7/$basearch/debug
http://mirrors.aliyuncs.com/epel/7/$basearch/debug
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=0
[epel-source]
name=Extra Packages for Enterprise Linux 7 - $basearch - Source
baseurl=http://mirrors.aliyun.com/epel/7/SRPMS
http://mirrors.aliyuncs.com/epel/7/SRPMS
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=0
##再次安装
yum install supervisor -y
##测试是否安装成功
echo_supervisord_conf
**
5.使用Supervisor
**
进入服务器centos01,经过第一步,基本环境已经搭好,首先编辑配置文件/root/config.json
这里我用的是外部数据库,所以本地没有安装mysql服务
{
“taskdb”: “mysql+taskdb://root:1234@192.168.2.100:3306/taskdb”,
“projectdb”:“mysql+taskdb://root:1234@192.168.2.100:3306/pyspider_projectdb”,
“resultdb”: “mysql+taskdb://root:1234@192.168.2.100:3306/pyspider_resultdb”,
“message_queue”: “mysql://root:root@192.168.2.67:3306/0”,
“webui”: {“port”: 5000 }
}
添加scheduler.ini、webui.ini 写入后,运行 supervisorctl reload 刷新配置,即会自动运行。
systemctl enable supervisord.service ##添加到自启动服务
supervisorctl ##启动supervisor的命令行窗口
##假设在主机master中创建进程scheduler、webui
vim /etc/supervisord.d/scheduler.ini ##写入以下内容并保存
[program:scheduler]
command = pyspider -c /root/config.json scheduler ##仅启动组件scheduler
directory = /usr/lib/python2.7/site-packages/pyspider##这是我自己的pyspider地址
user = root
process_name = %(program_name)s
autostart = true
autorestart = true
startsecs = 3
redirect_stderr = true
stdout_logfile_maxbytes = 500MB
stdout_logfile_backups = 10
stdout_logfile = /pyspider/supervisor/scheduler.log
vim /etc/supervisord.d/webui.ini ##写入以下内容并保存
[program:webui]
command = pyspider -c /root/config.json webui ##仅启动组件webui
directory = /usr/lib/python2.7/site-packages/pyspider
user = root
process_name = %(program_name)s
autostart = true
autorestart = true
startsecs = 3
redirect_stderr = true
stdout_logfile_maxbytes = 500MB
stdout_logfile_backups = 10
stdout_logfile = /etc/supervisord.d/webui.log
进入服务器centos02、centos03,在从机slave中创建进程fetcher、processor、result-worker ##注意这里是result-worker不是result_worker ,如果webui 如果和 scheduler 不在同一台机器上,需要设置 --scheduler-rpc 的地址,告诉 webui 如何与 scheduler 通信,以实现监控
centos01 | scheduler、webui |
---|
centos02 | fetcher、processor、result-worker |
centos03 | fetcher、processor、result-worker |
**
6.最后
**
进入三台机器,运行 supervisorctl reload
查看运行状态supervisorctl status
- scheduler RUNNING pid 43638, uptime 21:09:12
- webui RUNNING pid 43639, uptime 21:09:12
- fetcher RUNNING pid 23783, uptime 21:09:12
phantomjs RUNNING pid 23785, uptime 21:09:12- processor RUNNING pid 23784, uptime 21:09:12
- result_worker RUNNING pid 23782, uptime 21:09:12
访问 http://192.168.2.68:5000 即可,尽情爬取吧。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)