分佈式集羣之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

相關文章
相關標籤/搜索