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

若是采用redis数据库集群操做方式爬取数据源,那么爬虫客户端最好设置redis数据库的密码,不然对方将没法进行数据库连接操做,而且会报未知错误。redis

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

若是执行分布式爬取操做:lpush  readspider:start_urls https://www.qidian.com/allorderId=&style=1&pageSize=20&siteid=1&pubflag=0&hiddenField=0&page=1dom

若是出现爬取页面url与请求url冲突,则能够设置settings下的配置:scrapy

 

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

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

from scrapy_redis.spiders import RedisCrawlSpider

首先导入分布式redis爬虫类ide

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

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

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

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

 #动态域范围获取
    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里指定数据库的配置:

# 指定数据库的主机IP
REDIS_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数据库发送指令:

lpush  readspider:start_urls https://www.qidian.com/allorderId=&style=1&pageSize=20&siteid=1&pubflag=0&hiddenField=0&page=1

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

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

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

若客户端尚未爬虫项目,且爬虫项目已经在其余主机上开发完成,则能够直接远程推送给客户端。

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

相关文章
相关标签/搜索