分布式集群之redis数据库操作

网友投稿 669 2023-04-03

分布式集群之redis数据库操作

分布式集群之redis数据库操作

如果采用redis数据库集群操作方式爬取数据源,那么爬虫客户端最好设置redis数据库的密码,否则对方将无法进行数据库链接操作,并且会报未知错误。

redis-cli -h 192.168.1.53 -p 6379 -a 12345   (依次是 目标主机地址,端口号,对方数据库密码) 如此能确保集群的正常拼通

如果出现爬取页面url与请求url冲突,则可以设置settings下的配置:

SPIDER_MIDDLEWARES = { 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware': None,}

将crawlspider改写为分布式爬虫的实现:

from scrapy_redis.spiders import RedisCrawlSpider

首先导入分布式redis爬虫类

1.首先将爬虫文件的继承类由 crawl spider改写为RedisCrawlSpider

2.此时继承类不在支持allowed_domains和start_urls这两个配置参数,直接注释掉

3.redis_key='当前类名:start_urls'替代start_urls,作为程序的启动执行指令。

4.动态域范围获取的初始化方法,固定格式,且必须实现。

#动态域范围获取 def __init__(self,*args,**kwargs): domain=kwargs.pop('domain','') self.allowed_domains=filter(None,domain.split(',')) super(ReadSpider,self).__init__(*args,**kwargs)

爬虫文件修改完成,对配置文件settings进行设置:

# 使用scrapy-redis里的去重组件,不使用scrapy默认的去重方式DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"# 使用scrapy-redis里的调度器组件,不使用默认的调度器SCHEDULER = "scrapy_redis.scheduler.Scheduler"# 允许暂停,redis请求记录不丢失SCHEDULER_PERSIST = True# 默认的scrapy-redis请求队列形式(按优先级)SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue"# 队列形式,请求先进先出#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderQueue"# 栈形式,请求先进后出#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderStack"# LOG_LEVEL = 'DEBUG'

在settings里指定数据库的配置:

# 指定数据库的主机IPREDIS_HOST = "127.0.0.1"# 指定数据库的端口号REDIS_PORT = 6379#数据库密码REDIS_PARAMS = {'password': '123456'}

最好默认就将上文提到的spider_middlewares中间件开启,并安上述配置为None

SPIDER_MIDDLEWARES = { 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware': None,}

最后在管道文件添加scrapy_redis的管道类

ITEM_PIPELINES = { 'qd.pipelines.QdPipeline': 300, 'scrapy_redis.pipelines.RedisPipeline': 400,}

至此爬虫修改完成。

执行流程:进入当前项目的爬虫文件目录下,执行 scrapy runspider read.py

爬虫将被唤醒,处于阻塞状态,监听指定数据库的IP和端口,

redis数据库发送指令:

爬虫启动,开始采集数据。

*************************************************************************************

如果想实现两台或者多台计算机的分布式爬虫策略:

若客户端还没有爬虫项目,且爬虫项目已经在其他主机上开发完成,则可以直接远程推送给客户端。

1.将爬虫项目打成tar包 :tar -cvf qidian.tar.gz qidian    qidian.tar

2.连接至客户端:sftp 用户名@IP地址    -----> sftp lisa@192.168.1.53

3.输入客户端用户的密码,连接成功

4. ls查看客户端下当前目录,lls查看本机所在目录。

5.发包到客户端 put qidian.tar

6.客户端解包项目:tar -xvf qidian.tar

那么客户端就可以部署项目了,部署时一定要更改成当前redis的IP和端口

关于redis数据库服务:若是没有关闭远程保护,会禁止客户端的远程连接:在redis server xxx.cfg配置文件里

将protected-mode配置项设为no,注意 要在配置文件中修改,若直接在客户端中通过config set protected-mode no命令修改,只对本次有效,redis-server重启后,还是为yes

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:redis学习之——在分布式数据库中CAP原理CAP+BASE
下一篇:oracle 分布式数据库
相关文章