What is 分布式,爬虫?
使用多台机器组成一个分布式的机群,在机群中运行同一组程序。进行联合数据的爬取 !
Scrapy怎么实现分布式?
原生Scrapy是无法实现分布式的 !
Reason:
- 原生scrapy中的调度器无法共享,
- 原生scrapy中的管道不可以被共享
Solution:
- 必须使用scrapy-redis(模块)
- 该模块可以 给原生的scrapy提供共享的管道和调度器
- pip install scrapy-redis
搭建流程:
1. 创建工程 2. 爬虫文件 3. 将当前爬虫文件的父类修改为 RedisCrawlSpider 4. # allowed_domain 和起始url不再需要,删除 ,然后创建调度器队列名称 redis_key` 5. 数据解析,将解析的数据封装到Item中然后向管道提交。 6. settings.py中重新配置 - 指定管道 : """ ITEM_PIPELINES = { 'scrapy_redis.pipelines.RedisPipeline': 400 } """ - 指定调度器: """ # 使用scrapy-redis组件的去重队列 DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter" # 使用scrapy-redis组件自己的调度器 SCHEDULER = "scrapy_redis.scheduler.Scheduler" # 是否允许暂停 SCHEDULER_PERSIST = True """ - 指定具体的redis : """ REDIS_HOST = 'redis服务的ip地址' REDIS_PORT = 6379 REDIS_ENCODING = ‘utf-8’ REDIS_PARAMS = {‘password’:’123456’} """ 7. 开启redis服务: - redis.windows.conf 取消默认绑定 "127.0.0.1" ;关闭保护模式 - redis-server - redis-cli 8.运行爬虫文件: scrapy runspider SpiderFile.py 9. 向调度器队列中扔入一个起始url(在redis客户端中操作):lpush redis_key属性值 起始url