分布式爬虫
- 概念:搭建一个分布式的机群,让其对一组资源进行分布联合爬取。
- 作用:大大提升爬取数据的效率
如何实现分布式?
- 安装一个scrapy-redis的组件(原生的scarapy是不可以实现分布式爬虫,必须要让scrapy结合着scrapy-redis组件一起实现分布式爬虫)
- scrapy-redis组件可以给原生的scrapy框架提供可以被共享的管道和调度器
- 实现流程
- 创建一个工程
- 创建一个爬虫文件
- 修改当前的爬虫文件:
- 导包:from scrapy_redis.spiders import RedisSpider
- 将start_urls
和allowed_domains
进行注释
- 添加一个新属性:redis_key = 'XXX'
可以被共享的调度器队列的名称
- 编写数据解析相关的操作
- 将当前爬虫类的父类修改成RedisSpider
- 修改配置文件
settings
- 指定使用可以被共享的管道:
ITEM_PIPELINES = {
'scrapy_redis.pipelines.RedisPipeline': 400
}
- 指定调度器:
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
SCHEDULER_PERSIST = True
- 指定redis服务器:
REDIS_HOST = 'XXXXX'
REDIS_PORT = '6379'
REDIS_ENCODING = 'utf-8'
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
爬取到的数据存储在了redis
的proName:items
这个数据结构中