編輯本隨筆redis
概念:在多臺機器上執行同一個爬蟲程序,實現網站數據的分佈式爬取數據庫
原生scrapy不能夠實現分佈式爬蟲,緣由以下:服務器
分佈式爬蟲組件:scrapy-redis,該組件能夠讓scrapy實現分佈式。框架
# -*- 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
#使用組件封裝的管道,不使用原生的管道 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
UA池:user-agent池dom
代理池:對代理IP進行批量更換scrapy
selenium如何應用到scrapy框架分佈式