分佈式爬蟲
-
什麼是分佈式爬蟲python
- 基於多臺電腦組件一個分佈式機羣,而後讓每一臺電腦執行同一組程序,讓後讓他們對同一個網站的數據進行分佈式爬取
-
爲何使用分佈式爬蟲redis
- 提示爬取數據效率
-
如何實現分佈式爬蟲windows
- 基於scrapy + redis 的形式實現分佈式
- 原生的scrapy框架不能實現分佈式,緣由:
- 調度器沒法被分佈式機羣共享
- 管道沒法數據共享
- scrapy框架和scrapy-redis 組件實現的分佈式
- scrapy-redis 組件做用:
- 提供能夠被共享的調度器和管道
- 原生的scrapy框架不能實現分佈式,緣由:
- 基於scrapy + redis 的形式實現分佈式
環境安裝
- redis
- pip install scrapy-redis
編碼流程
-
建立一個工程安全
-
建立一個爬蟲文件:基於CrawlScrapy框架
- 修改當前的爬蟲文件
- 導包:from scrapy_redis.spiders import RedisCrawlSpider
- 將當前爬蟲類的父類修改爲RedisCrawlSpider
- 將start_urls替換成redis_key = ‘xxx’ #表示的是可被共享調度器中隊列的名稱
- 編寫爬蟲類爬取數據的操做
- 修改當前的爬蟲文件
-
對settings進行配置:scrapy
-
指定管道:分佈式
# 開啓能夠被共享的管道 ITEM_PIPELINES = { 'scrapy_redis.pipelines.RedisPipeline': 400 }
-
指定調度器ide
# 增長了一個去重容器類的配置, 做用使用Redis的set集合來存儲請求的指紋數據, 從而實現請求去重的持久化 DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter" # 使用scrapy-redis組件本身的調度器 SCHEDULER = "scrapy_redis.scheduler.Scheduler" # 配置調度器是否要持久化, 也就是當爬蟲結束了, 要不要清空Redis中請求隊列和去重指紋的set。若是是True, 就表示要持久化存儲, 就不清空數據, 不然清空數據 SCHEDULER_PERSIST = True
-
指定redis的服務網站
REDIS_HOST = 'redis服務的ip地址' REDIS_PORT = 6379
-
-
redis的配置文件進行配置:redis.windows.conf編碼
-取消ip綁定:#bind 127.0.0.1 -取消安全模式:protected-mode no
- 攜帶配置文件啓動redis服務
- ./redis-server redis.windows.conf
- 啓動redis的客戶端
- redis-cli
- 攜帶配置文件啓動redis服務
-
執行當前的工程:
進入到爬蟲文件對應的目錄中:scrapy runspider xxx.py
-
向調度器隊列中仍入一個起始的url:
- 隊列在哪裏呢?答:隊列在redis中
- lpush fbsQueue www.xxx.com
- 隊列在哪裏呢?答:隊列在redis中