这段时间在用 scrapy 爬取大众点评美食店铺的信息,由于准备爬取该网站上全国各个城市的信息,单机跑效率肯定是跟不上的,所以只能借助于分布式。scrapy 学习自崔庆才老师的视频,受益颇多,代码简练易懂,风格清新。这里梳理一遍从刚申请的服务器环境配置,python 安装,到搭建能运行分布式爬虫的整个流程。
服务器我是申请的阿里云的学生机,腾讯云和美团云也申请了,相比起来还是阿里云用起来舒服,腾讯云使用体验最差。我装的是 centos 系统,以下也是 centos 下遇到的问题及解决问题的找过的链接。另外阿里云需要添加安全组规则,将后面会用到的端口放行,例如27017,6800等。
从机配置
1.python 的安装
在装过好几台服务器后总结出了最短且有效的装 python 的方法,参考了这篇文章这里简要总结一下
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-develreadline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-develwget https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgzmkdir /usr/local/python3tar -zxvf Python-3.6.3.tgzcd Python-3.6.3./configure --prefix=/usr/local/python3make && make installln -s /usr/local/python3/bin/python3 /usr/bin/python3ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3- 最后命令行下输入
pip3和python3 -V
2.mongodb的安装
在从机上都装上 mongodb,爬取的数据都存在各自的服务器上,之后再汇总。这里参考了这篇文章
vim /etc/yum.repos.d/mongodb-org-3.4.repo
将以上内容复制粘贴进去刚打开的窗口yum -y install mongodb-orgsystemctl enable mongod.servicevim /etc/mongod.confsystemctl restart mongod.servicesystemctl stop mongod.service
记录一下刚学习时命令行下的编辑操作,vim 打开文件后,insert 进行编辑,退出编辑 esc,shift+两下Z。查找关键词是:/+关键词
3.利用 pip3 安装 scrapy 等
一般正常顺序先pip3 install scrapy,接着肯定会报requirement Twisted>=13.1.0这种错误,一次偶然我先pip3 install scrapyd发现安装上了最新的 Twisted 组件,接着安装 scrapy也没再报错。所以为了省事,避开报错,建议先安装 scrapyd。
pip3 install scrapydpip3 install scrapypip3 install pymongopip3 install redispip3 install redis-client
安装完以上内容,基本能满足分布式从机的爬取。但是在命令行直接输入scrapyscrapydcommand not found,这里可以通过创建软链接解决问题。
find / -name scrapy找到系统中scrapy所在的目录,选择在bin目录下的路径ln -s /usr/local/python3/bin/scrapy /usr/bin/scrapyscrapy
scrapyd 创建软链接的方法与上面一样,其实在后面加个d就好了(笑)
scrapy 创建软链接如下

scrapyd 创建软链接如下

在开启了 scrapyd 服务后发现监听 ip 为本机,想要远程访问需要将配置修改一下。先 ctrl+c 退出 scrapyd,打开 scrapyd 配置文件所在的文件夹
cd /usr/local/python3/lib/python3.6/site-packages/scrapydlsvim default_scrapyd.confbind_address = 0.0.0.0scrapyd会发现监听 ip 发生了变化。
由于从机的scrapyd需要后台运行,这里我采用了setsid scrapyd
需要结束scrapyd进程时,利用ps -ef | grep -i scrapydkill -9 PID
主机配置
以上完成了从机的配置,接下里配置主机
主机和从机不同在于它需要提供 redis 服务来保存请求队列,所以主要是安装 redis 服务。参考了众多文章后,还是推荐这篇文章
这里梳理一下过程:
yum install gccwget http://download.redis.io/releases/redis-3.0.6.tar.gztar zxvf redis-3.0.6.tar.gzcd redis-3.0.6redis看着简洁一些vim redis.conf#bind 127.0.0.1daemonize yesrequirepassprotected-mode nocd utilsvim redis_init_scriptcp redis_init_script /etc/init.d/redisdchkconfig redisd onservice redisd startservice redisd stop
遇到过的问题
以上内容完成了主机上 redis 服务的搭建MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk.Commandsthat may modify the data set are disabled. Please check Redis logs for details about the error.
原因是强制关闭 Redis 快照导致不能持久化,我采取了下面解决方法
redis-cli -a 密码127.0.0.1:6379> config set stop-writes-on-bgsave-error no
通过主机与从机的搭建,分布式运行的条件有了,本地需要pip install scrapyd-clientcurlscrapyd-deploy解决办法
Python\Python36\Scripts- 创建名为
scrapyd-deploy.bat - 写入
scrapyd-deployscrapydscrapyd-client

END