导读
概念:搭建一个分布式的机群,让其对一组资源进行分布式爬取。
作用:提升爬虫的效率
如何实现分布式?
1.安装scrapy-redis的组件
2.scrapy-redis组件的作用: 可以给原生的scrapy框架提供可以被共享的调度器和管道。
实现流程
1.创建一个工程
2.创建一个基于CrawlSpider的爬虫文件。
3.修改当前的爬虫文件:
1. 导包: ```from scrapy_redis.spiders import RedisCrawlSpider ```2 将start_urls和allowed_domains进行注释3 添加一个新的属性值:redis_key = 'xxxx' 可以被共享的调度器名称4 编写数据解析相关的工作5 将当前爬虫继承的父类改写成 RedisCrawlSpider
4.修改settings配置文件
- 指定可以被共享的管道:
ITEM_PIPELINES = {
'scrapy_redis.pipelines.RedisPipeline':400
}
# 当下载scrapy_redis库后,RedisPipeline管道已经在库中存在了,不用自己创建
- 指定调度器
DUPEFILTER_CLASS = 'scrapy_redis.dupefilter.RFPDupeFilter'
# 增加一个去重容器类的配置,作用:使用redis的set集合来储存请求的指纹数据,从而起到请求去重的持久化
SCHEDULER = 'scrapy_redis.scheduler.Scheduler'
# 使用scrapy-redis自己的调度器
SCHEDULER_PERSIST = True
# 配置调度器是否要持久化,也就是爬虫结束后,要不要清空redis中的请求队列和去重指纹的set
# 若爬取中断,下一次从中断的位置开始爬取
- 指定redis服务器
REDIS_HOST = 'redis的服务器ip地址'
REDIS_POST = '6379'
# 若存本机可写127.0.0.1
5.redis相关操作配置:
- 配置redis的配置文件 :1.linux:redis.windows.conf. 2. 代开文件配置:1.将bind 127.0.0.1注释。2.关闭保护模式 protected-mode:yes改为no 3.daemonize 改为 yes(表示可以后台运行)
- 结合配置文件开启redis服务 : redis-server redis.windows.conf
- 启动客户端:redis-cli.exe
6 执行工程:scrapy runspider xxx.py
7. 像调度器队列放入一个起始的url:调度器的队列在redis客户端中: lpush xxx(redis_key) www.xxx.com
8. 爬取到的数据储存在redis的proName:items这个数据结构当中
9.查看数据:在redis的客户端输入:1. keys* 2.lrange xxx:items 0 -1 (显示爬到的数据) 3. llen xxx:items(看爬了多少数据)