分布式集群之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=1

如果出現爬取頁面url與請求url沖突,則可以設置settings下的配置:

 

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

 將crawlspider改寫為分布式爬蟲的實現:

from scrapy_redis.spiders import RedisCrawlSpider

首先導入分布式redis爬蟲類

1.首先將爬蟲文件的繼承類由 crawl spider改寫為RedisCrawlSpider

2.此時繼承類不在支持allowed_domainsstart_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里指定數據庫的配置:

# 指定數據庫的主機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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM