分布式:
什么是分布式爬虫?
基于多台电脑组建一个分布式机群,然后让机群中的每一台电脑执行同一组程序,然后让他们对同一个网站的数据进行爬取
为什么要使用分布式?
提升爬取数据的效率
如何实现分布式爬虫
基于scrapy+redis的形式实现分布式
scrapy结合scrapy-redis组件实现分布式
原生scrapy框架为什么无法实现分布式
调度器和管道无法被分布式机群共享
scrapy-redis组件的作用:
提供可以被共享的调度器和管道
环境安装:
redis
pip install scrapy-redis
编码流程:
创建一个工程
创建一个爬虫文件:可以基于CrawSpider也可以是普通文件
修改当前爬虫文件:
导包:from scrapy_redirs.spider import RedisCrawlSpider
普通类导:RedisSpider
将start_urls替换成redis_key = ‘xxx’ #表示的是可以被共享调度器中队列名称
编写爬虫类爬取数据操作(此时没有起始url)
对settings进行配置:
指定管道:
#开启共享管道
ITEM_PIPELINES = {
’scrapy_redis.pipelines.RedisPipeline‘:400
}
指定调度器:
#增加了一个去重容器类,作用使用Redis的set集合来存储请求的指纹数据,从而实现请· 求去重
DUOEFILTER_CLASS = ‘scrapy_redis.dupefilter.RFPDupeFilter’
#使用scrapy-redis组件自己的调度器
SCHEDULER =”scrpay_redis.scheduler.Scheduler”
#配置调度器是否要持久化,也就是当爬虫结束后要不要清空Redis中请求队列和去重指 纹的set
SCHEDULER _PERSIST = True
指定redis服务(在settings.py):
REDIS_HOST=’redis服务的ip地址’
REDIS_PORT = 6379
redis的配置文件进行配置:redis.windows.conf
56行:#bind 127.0.0.1
75行:pritected-mode no
携带配置文件启动redis服务
./redis-server redis.windows.conf
启动redis的客户端
redis-cli
执行当前工程:
进入到爬虫文件对应的目录:scrapy runspider xxx.py
向调度器队列中扔入一个起始url:
队列在哪里呢?答:在redis中
1push redis_key www.xxx.cm
#redis_key是在爬虫文件中定义的