天天看點

scrapy_redis 實作分布式爬蟲scrapy_redis 要實作分布式爬蟲,需要分析項目中的spiders檔案夾中的爬蟲檔案

scrapy_redis 要實作分布式爬蟲,需要分析項目中的spiders檔案夾中的爬蟲檔案

#----1 導入分布式爬蟲類

from scrapy_redis.spiders import RedisSpider
           

#----2 繼承分布式爬蟲類

class BookSpider(RedisSpider):
           

#----3 登出start_urls,增加了一個redis-key,沒有start_urls,因為分布式中,如果每台電腦都請求一次start_url就會重複

redis_key = 'start_url在redis中對應的鍵'
           

#----4 多了__init__方法,該方法不是必須的,可以手動指定allow_domains

#----4.1 登出allowed_domains

# # 修改允許的域xxx
	    # allowed_domains = ['xxx.com']
	    # # 修改起始的url
	    # start_urls = ['https://xxx.com']
           

#----4.2 配置__init__方法

def __init__(self, *args, **kwargs):
        # Dynamically define the allowed domains list.
        domain = kwargs.pop('domain', '')
        self.allowed_domains = list(filter(None, domain.split(',')))
        super(定義的爬蟲類名, self).__init__(*args, **kwargs)
           

#----5 啟動方法

#----5.1 在每個節點正确的目錄下執行爬蟲檔案,使該節點的scrapy_redis爬蟲程式就位

scrapy crawl 爬蟲名
           

#----5.2 在redis中給redis_key添加起始url,使全部節點真正的開始運作

lpush redis_key 'start_url'
           

#----0 在settings.p中添加斷點續爬的配置,實作真正的分布式爬蟲

DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
SCHEDULER_PERSIST = True

ITEM_PIPELINES = {
    'scrapy_redis.pipelines.RedisPipeline': 400,
}
REDIS_URL = "redis://127.0.0.1:6379"
           

繼續閱讀