分佈式爬取

編輯本隨筆redis

概念:在多臺機器上執行同一個爬蟲程序,實現網站數據的分佈式爬取數據庫

原生scrapy不能夠實現分佈式爬蟲,緣由以下:服務器

  1. 調度器沒法在多臺電腦上共享
  2. 管道沒法共享

分佈式爬蟲組件:scrapy-redis,該組件能夠讓scrapy實現分佈式。框架

  1. pip install scrapy-redis

分佈式爬取流程:

  1. redis數據庫安裝
  2. redis文件配置
    • 將bind 127.0.0.1註銷掉
    • 將保護模式改成no,關閉保護模式,即protected-mode no
  3. 基於配置文件啓動redis服務器

代碼流程:

  1. 建立scrapy工程,建立基於crawlSpider的項目
  2. 從scrapy_redis.spiders中導入RedisCrawlSpider,並將項目的父類由CrawlSpider改成RedisCrawlSpider
  3. 指定redis_key,指定start_urls在redis數據庫中存放的位置
    # -*- coding: utf-8 -*-
    import scrapy
    from scrapy.linkextractors import LinkExtractor
    from scrapy.spiders import CrawlSpider, Rule
    from scrapy_redis.spiders import RedisCrawlSpider
    
    class QiubaiSpider(RedisCrawlSpider):
        name = 'qiubai'
        allowed_domains = ['https://www.qiushibaike.com/imgrank/']
        # start_urls = ['http://https://www.qiushibaike.com/imgrank//']
        #表示start_urls在redis中存放的位置,做用相似start_urls
        redis_key="qiubaispider"
        rules = (
            Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', follow=True),
        )
    
        def parse_item(self, response):
            item = {}
            #item['domain_id'] = response.xpath('//input[@id="sid"]/@value').get()
            #item['name'] = response.xpath('//div[@id="name"]').get()
            #item['description'] = response.xpath('//div[@id="description"]').get()
            return item
    View Code
  4. 配置setting文件,將項目的管道和調度器配置成基於scrapy-redis組件對應提供的功能
    #使用組件封裝的管道,不使用原生的管道
    ITEM_PIPELINES = {
       'scrapy_redis.pipelines.RedisPipeline': 300,
    }
    # 使用scrapy-redis組件的去重隊列進行去重操做
    DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
    
    # 使用scrapy-redis組件本身的調度器
    SCHEDULER = "scrapy_redis.scheduler.Scheduler"
    
    # 是否容許暫停,即程序意外宕機重啓後從上次意外退出的地方從新爬取
    SCHEDULER_PERSIST = True
    
    #Redis服務器地址,代碼拷貝到其餘服務器後,爬取的數據將保存到以下地址的redis服務器中
    REDIS_HOST="192.168.1.1"
    
    #Redis服務器端口
    REDIS_PORT=6379
  5. 執行爬蟲文件,進入爬蟲目錄scrapy runspider qiubai.py,啓動後爬蟲就開始監聽redis的qiubaispider鍵對應的內容

  6. 將起始url放入redis中:127.0.0.1:6379> lpush qiubaispider https://www.qiushibaike.com/pic/
  7. 開始爬取內容

基於RedisSpider實現分佈式爬蟲

UA池:user-agent池dom

代理池:對代理IP進行批量更換scrapy

selenium如何應用到scrapy框架分佈式

相關文章
相關標籤/搜索