分布式
分布式的本质就如上期提到的一个概念:分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像是单个相关系统。这就是在说,把廉价的计算机堆到一起,通过程序控制,使其整体用起来像个高性能计算机,目的就是节约成本。
对于分布式爬虫系统来说,假设1台机器能10天爬完一个任务,如果部署10台机器,那么1天就会完成这个任务。这样就用可以接受的成本,让系统的效率提高了十倍。
实现方式
基于scrapy+redis(结合scrapy-redis组件)
scrapy-redis组件作用:
-可以给原生的scrapy框架提供共享的管道和调度器
-pip install scrapy-redis
新建工程
scrapy startproject FBS cd FBS scrapy genspider -t crawl fbspc www.xxx.com
实现流程
1.修改爬虫文件
#1.导包 from scrapy_redis.spiders import RedisCrawlSpider #2.修改当前爬虫类的父类为RedisCrawlSpider #3.将start_url替换成redis_keys属性,属性值为任意字符串 redis_key = "test" # 可以被共享的调度器的名称,最终是需要将起始的url手动放置在redis_key表示的队列中 #4.进行数据解析
2.对setting.py进行配置
-指定调度器
# 增加一个去重容器类的配置,作用使用redis的set集合来存储请求的指纹数据,从而实现请求去重 DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter" #使用scrapy-redis组件自己的调度器 SCHEDULER = "scrapy_redis.scheduler.Scheduler" #配置调度器是否要持久化,也就是的那个爬虫结束了,要不要清空Redis中请求队列和去重指纹的set。如果是True,表示要初九话,不清空数据,否则清空数据 SCHEDULER_PERSIST = True
-指定管道
ITEM_PIPELINES = { 'scrapy_redis.pipelines.RedisPipeline':400 }
-指定redis
REDIS_HOST = '127.0.0.1' PORT = 6379 REDIS_ENCODING = 'utf-8' REDIS_PARAMS = {'password':'123456'}
3.配置redis的配置文件(redis.window.conf)
-解除默认绑定
-56行注释:#bind 127.0.0.1
-关闭保护模式
-75行:protected-mode no
4.启动redis服务和客户端
5.执行scrapy工程
程序会停留在listening位置:等待起始uel加入
6.向redis_key表示的队列中添加起始url
需要在redis客户端执行如下命令:
-lpush test https://wz.sun0769.com/political/index/politicsNewest?id=1&page=1 # test为redis_key,后面的url为自己添加的
标签:url,redis,爬虫,scrapy,key,分布式 From: https://www.cnblogs.com/xiongying4/p/17457681.html