一个基于scrapy-redis的分布式爬虫模板,在scrapy-redis自带的example的基础上进行修改,添加在实际爬取过程中大部分爬虫可能用到的功能,使的构建分布式爬虫更加的简单。 scrapy-redis: https://github.com/darkrho/scrapy-redis
####Windows
Redis
官网没有windows
的安装程序,但是微软的MsOpenTech
团队维护了Windows
的Redis
,编译了可执行程序,需要的可以到https://github.com/MSOpenTech/redis/releases下载
$sudo apt-get install redis-server
下载地址:https://github.com/cinience/RedisStudio/releases
scrapy-redis
GitHub地址:https://github.com/darkrho/scrapy-redis
推荐使用pip
安装
$pip install scrapy-redis
从GitHub
克隆仓库,克隆成功即可得到一个可以运行的爬虫,该爬虫默认已经配置好了Redis
,worker
以及用户代理等功能
$ git clone https://github.com/KDF5000/RSpider.git
Scrapy-redis
的所有配置到放在setting.py
的特定位置,如下面所示,每个配置项代表什么意思注释已经详细的说明,不需要过多解释,如果不想使用Scrapy-redis
将所有配置项注释掉即可
# 修改scrapy默认的调度器为scrapy重写的调度器 启动从reids缓存读取队列调度爬虫
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 调度状态持久化,不清理redis缓存,允许暂停/启动爬虫
SCHEDULER_PERSIST = True
# 请求调度使用优先队列(默认)
#SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.SpiderPriorityQueue'
# 请求调度使用FIFO队列
#SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.SpiderQueue'
# 请求调度使用LIFO队列
#SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.SpiderStack'
# 最大的空闲时间,避免分布式爬取得情况下爬虫被关闭
# 此设置只适用于SpiderQueue和SpiderStack
# 也是爬虫第一次启动时的等待时间(应为队列是空的)
#SCHEDULER_IDLE_BEFORE_CLOSE = 10
# 存储爬取到的item,一定要在所有的pipeline最后,即设定对应的数字大于其他pipeline
ITEM_PIPELINES = {
'RSpider.pipelines.BaseSpiderPipeline': 256,
'scrapy_redis.pipelines.RedisPipeline': 300
}
# 指定redis的地址和端口(可选,程序将使用默认的地址localhost:6379)
REDIS_HOST = 'localhost'
REDIS_PORT = 6378
# 声明redis的url地址(可选)
# 如果设置了这一项,则程序会有限采用此项设置,忽略REDIS_HOST 和 REDIS_PORT的设置
#REDIS_URL = 'redis://user:pass@hostname:9001'
目前graphite
不支持Windows
,所以使用Windows
的用户要么在自己电脑搭个虚拟环境,要么在一台可以访问的Linux
主机搭建该服务。如果有时间研究一下Docker
自己写个镜像。
具体安装参考Ubuntu 14.04 安装图形监控工具Graphite
该模板源码自定一个scrapy
的Stats Collection,封装了graphite client
使用plaintext protocol发送数据到graphite
所在服务器的Carbon
,客户端的使用可以查看statscol/graphite.py
文件