scrapy分布式爬虫设置

scrapy本身不支持分布式爬虫,但是可以通过第三方模块来达到分布式目的.

需要准备的环境:

redis数据库: 版本:2.8以上
python环境: 2.7或者3.4版本以上
安装scrapy-redis模块: (scrapy版本需要1.1以上)

操作方法

在本地写好爬虫项目以后,只需要在scrapy的settings里设置以下几项即可:
1.重新指定调度器: 启用Redis调度存储请求队列

SCHEDULER = "scrapy_redis.scheduler.Scheduler"

2.重新指定去重机制: 确保所有的爬虫通过Redis去重

DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

3.不清除Redis队列: 暂停/恢复/断点续爬

SCHEDULER_PERSIST = True

4.优先级队列 (默认)

SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.PriorityQueue'

可选用的其它队列

  • a.先进先出队列
SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.FifoQueue'
  • b.后进先出队列
SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.LifoQueue'

5.在settings.py的ITEM_PIPELINES里添加redis管道

'scrapy_redis.pipelines.RedisPipeline': 300

6.指定连接到redis时使用的端口和地址

REDIS_HOST = '服务器ip'
REDIS_PORT = 端口号

到这里,简单的分布式功能已经完成,把代码放到每个服务器就可以同时运行,但是这样一来很不方便,每次启动爬虫的时候,都需要依次进每个服务器开启爬虫.在此基础上稍加改进, 就可以只在一台服务器上开启所有的爬虫程序.
第一步: settings.py
在setting.py里,修改以下参数, 项目结束后,到指定时间(3600秒)时,会自动结束并退出,当然可以根据实际情况选择修改或不修改

CLOSESPIDER_TIMEOUT = 3600

第二步:在爬虫文件中导入scrapy_redis模块

from scrapy_redis.spiders import RedisSpider
  • 1. 去掉scrapy自带的start_urls
  • 2. 定义scrapy_redisredis_key
redis_key = '(爬虫名):spider'

第三步:把代码复制到所有爬虫服务器,并启动项目
第四步:到redis命令行,执行LPUSH命令压入第一个要爬取的URL地址

>LPUSH (爬虫名):spider 第1页的URL地址

稍作停顿,所有的爬虫程序就会自动开始抓取数据.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值