当前位置:   article > 正文

scrapy分布式爬虫设置_分布式爬虫的setting的修改

分布式爬虫的setting的修改

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

需要准备的环境:

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

操作方法

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

SCHEDULER = "scrapy_redis.scheduler.Scheduler"
  • 1

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

DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
  • 1

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

SCHEDULER_PERSIST = True
  • 1

4.优先级队列 (默认)

SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.PriorityQueue'
  • 1

可选用的其它队列

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

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

'scrapy_redis.pipelines.RedisPipeline': 300
  • 1

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

REDIS_HOST = '服务器ip'
REDIS_PORT = 端口号
  • 1
  • 2

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

CLOSESPIDER_TIMEOUT = 3600
  • 1

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

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/208626
推荐阅读
相关标签
  

闽ICP备14008679号