赞
踩
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'
可选用的其它队列
SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.FifoQueue'
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
redis_key = '(爬虫名):spider'
第三步:把代码复制到所有爬虫服务器,并启动项目
第四步:到redis命令行,执行LPUSH命令压入第一个要爬取的URL地址
>LPUSH (爬虫名):spider 第1页的URL地址
稍作停顿,所有的爬虫程序就会自动开始抓取数据.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。