分佈式爬蟲

分佈式爬蟲

  • 什麼是分佈式爬蟲python

    • 基於多臺電腦組件一個分佈式機羣,而後讓每一臺電腦執行同一組程序,讓後讓他們對同一個網站的數據進行分佈式爬取
  • 爲何使用分佈式爬蟲redis

    • 提示爬取數據效率
  • 如何實現分佈式爬蟲windows

    • 基於scrapy + redis 的形式實現分佈式
      • 原生的scrapy框架不能實現分佈式,緣由:
        1. 調度器沒法被分佈式機羣共享
        2. 管道沒法數據共享
      • scrapy框架和scrapy-redis 組件實現的分佈式
      • scrapy-redis 組件做用:
        1. 提供能夠被共享的調度器和管道

環境安裝

  • redis
  • pip install scrapy-redis

編碼流程

  1. 建立一個工程安全

  2. 建立一個爬蟲文件:基於CrawlScrapy框架

    • 修改當前的爬蟲文件
      • 導包:from scrapy_redis.spiders import RedisCrawlSpider
      • 將當前爬蟲類的父類修改爲RedisCrawlSpider
      • 將start_urls替換成redis_key = ‘xxx’ #表示的是可被共享調度器中隊列的名稱
      • 編寫爬蟲類爬取數據的操做
  3. 對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
  4. redis的配置文件進行配置:redis.windows.conf編碼

    -取消ip綁定:#bind 127.0.0.1 -取消安全模式:protected-mode no

    • 攜帶配置文件啓動redis服務
      • ./redis-server redis.windows.conf
    • 啓動redis的客戶端
      • redis-cli
  5. 執行當前的工程:

    進入到爬蟲文件對應的目錄中:scrapy runspider xxx.py
  6. 向調度器隊列中仍入一個起始的url:

    • 隊列在哪裏呢?答:隊列在redis中
      • lpush fbsQueue www.xxx.com
相關文章
相關標籤/搜索