redis分布式部署
1.scrapy框架是否可以自己實現分布式?
- 不可以。原因有二。
其一:因為多台機器上部署的scrapy會各自擁有各自的調度器,這樣就使得多台機器無法分配start_urls列表中的url。(多台機器無法共享同一個調度器)
其二:多台機器爬取到的數據無法通過同一個管道對數據進行統一的數據持久出存儲。(多台機器無法共享同一個管道)
2.基於scrapy-redis組件的分布式爬蟲
- scrapy-redis組件中為我們封裝好了可以被多台機器共享的調度器和管道,我們可以直接使用並實現分布式數據爬取。
- 實現方式:
1.基於該組件的RedisSpider類
2.基於該組件的RedisCrawlSpider類
3.分布式實現流程:上述兩種不同方式的分布式實現流程是統一的
- 3.1 下載scrapy-redis組件:pip install scrapy-redis
- 3.2 redis配置文件的配置:
3.3 修改爬蟲文件中的相關代碼:
- 將爬蟲類的父類修改成基於RedisSpider或者RedisCrawlSpider。注意:如果原始爬蟲文件是基於Spider的,則應該將父類修改成RedisSpider,如果原始爬蟲文件是基於CrawlSpider的,則應該將其父類修改成RedisCrawlSpider。
- 注釋或者刪除start_urls列表,切加入redis_key屬性,屬性值為scrpy-redis組件中調度器隊列的名稱
3.4 在配置文件中進行相關配置,開啟使用scrapy-redis組件中封裝好的管道
3.5 在配置文件中進行相關配置,開啟使用scrapy-redis組件中封裝好的調度器
3.6 在配置文件中進行爬蟲程序鏈接redis的配置:
3.7 開啟redis服務器:redis-server 配置文件
3.8 開啟redis客戶端:redis-cli
3.9 運行爬蟲文件:scrapy runspider SpiderFile
3.10 向調度器隊列中扔入一個起始url(在redis客戶端中操作):lpush redis_key屬性值 起始url