CrawlSpider-redis分布式
-
分布式在日常开发中并不常用,只是一个噱头!
-
概念:
- 可以使用多台电脑搭建一个分布式机群,使得多台对电脑可以对同一个网站的数据进行联合且分布的数据爬取。
-
声明:
- 原生的scrapy框架并无法实现分布式操作!why?
- 多台电脑之间无法共享同一个调度器
- 多台电脑之间无法共享同一个管道
- 原生的scrapy框架并无法实现分布式操作!why?
-
如何是的scrapy可以实现分布式呢?
- 借助于一个组件:scrapy-redis
- scrapy-redis的作用是什么?
- 可以给原生的scrapy框架提供可被共享的调度器和管道!
- 环境安装:pip install scrapy-redis
- 注意:scrapy-redis该组件只可以将爬取到的数据存储到redis数据库
-
编码流程(重点):
-
1.创建项目
-
2.cd 项目
-
3.创建基于crawlSpider的爬虫文件
-
3.1 修改爬虫文件
-
导包:from scrapy_redis.spiders import RedisCrawlSpider
-
修改当前爬虫类的父类为 RedisCrawlSpider
-
class FbsSpider(RedisCrawlSpider):
-
将start_urls替换成redis_key的操作
-
redis_key变量的赋值为字符串,该字符串表示调度器队列的名称
-
# start_urls = ["http://www.xxx.com/"] #redis_key的赋值为字符串,该字符串表示调度器队列的名称 redis_key = '队列名称'
-
-
进行常规的请求操作和数据解析
-
-
-
4.settings配置文件的修改
-
常规内容修改(robots和ua等),先不指定日志等级
-
USER_AGENT : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36" # Obey robots.txt rules ROBOTSTXT_OBEY = False
-
指定可以被共享的管道类
-
ITEM_PIPELINES = { 'scrapy_redis.pipelines.RedisPipeline': 400 }
-
-
指定可以被共享的调度器
-
# 使用scrapy-redis组件的去重队列 DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter" # 使用scrapy-redis组件自己的调度器 SCHEDULER = "scrapy_redis.scheduler.Scheduler" # 是否允许暂停 SCHEDULER_PERSIST = True
-
-
指定数据库
-
REDIS_HOST = '127.0.0.1' REDIS_PORT = 6379
-
-
-
5.修改redis数据库的配置文件--redis数据库文件目录(redis.windows.conf)
-
在配置文件中改行代码是没有被注释的:
-
bind 127.0.0.1 #将上述代码注释即可(解除本机绑定,实现外部设备访问本机数据库 如果配置文件中还存在:protected-mode = true,将true修改为false, 修改为false后表示redis数据库关闭了保护模式,表示其他设备可以远程访问且修改你数据库中的数据
-
-
-
6.启动redis数据库的服务端和客户端
- CMD运行:redis-server和redis-cli
-
7.运行项目,发现程序暂定一直在等待,等待爬取任务
-
8.需要向可以被共享的调度器的队列(redis_key的值)中放入一个起始的url
-
在redis数据库的客户端执行如下操作:
-
CMD:lpush 队列名称 起始的url
-
起始url:https://wz.sun0769.com/political/index/politicsNewest?id=1&page=1
-
-
-