爬虫之分布式爬虫

分布式爬虫
概念:我们需要搭建一个分布式的机群,让其对一组资源进行分布联合爬取。
作用:提升爬取数据的效率
如何实现分布式?
安装一个scrapy-redis的组件
原生的scarapy是不可以实现分布式爬虫,必须要让scrapy结合着scrapy-redis组件一起实现分布式爬虫
为什么原生的scrapy不可以实现分布式?
调度器不可以被分布式机群共享
管道不可以被分布式机群共享
scrapy-redis组件作用:
可以给原生的scrapy框架提供可以被共享的管道和调度器
实现流程
创建一个工程
创建—个基于CrawlSpider的爬虫文件: scrapy genspider -t crawl xxx www.xxx.com
修改当前的爬虫文件:
导包:from scrapy_redis.spiders import RedisCrawlSpider
将start_urls和allowed_domains进行注释
添加一个新属性:redis_key ='sun' # 可以被共享的调度器队列的名称
编写数据解析相关的操作
将当前爬虫类的父类修改成 RedisCrawlSpider
修改配置文件settings
指定使用可以被共享的管道:
ITEM_PIPELINES ={
'scrapy_redis.pipelines.RedisPipeline':400
}
指定调度器:
#增加了一个去重容器类的配置,作用使用Redis的set集合来存储请求的指纹数据,从而实现数据去重的持久化存储
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
#使用scrapy-redis组件自己的调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
#配置调度器是否要持久化,也就是当爬虫结束了,要不要清空Redis中请求队列和去重指纹的set,如果是True将接着爬取,不清空
SCHEDULER_PERSIST = True
指定redis服务器:
#指定redis
REDIS_HOST = '127.0.0.1' #redis远程服务器的ip
REDIS_PORT = 6379 #端口号
redis相关操作配置:
配置redis的配置文件:
linux或者mac: redis.conf
windows:redis.windows.conf
打开配置文件修改:
将bind 127.0.0.1进行删除
关闭保护模式:protected-mode yes改为no
结合着配置文件开启redis服务
redis-server 配置文件
启动客户端:
redis-cli
执行工程:
scrapy runspider xxx.py(爬虫文件的名字)
向调度器的队列中放入一个起始的url:
调度器的队列在redis的客户端中
lpush xxx(被共享的调度器队列的名称) www.xxx.com(起始url)
爬取到的数据存储在了redis的proName:items这个数据结构中
posted @ 2020-08-30 18:46  My帝王源  阅读(138)  评论(0)    收藏  举报