爬蟲入門之分佈式爬蟲

在這裏插入圖片描述

scrapy_redis

  1. Scrapy_redis在scrapy的基礎上實現了更多,更強大的功能,具體體現在:reqeust去重,爬蟲持久化,和輕鬆實現分佈式
  2. 安裝
pip3 install scrapy-redis

3.要使用分佈式 Scrapy_Redis Settings.py設置文件中需要做一下配置
這裏表示啓用scrapy-redis裏的去重組件,不實用scrapy默認的去重

DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

使用了scrapy-redis裏面的調度器組件,不使用scrapy默認的調度器

SCHEDULER = "scrapy_redis.scheduler.Scheduler"

允許暫停,redis請求的記錄不會丟失,不清除Redis隊列,可以恢復和暫停

SCHEDULER_PERSIST = True

下面這些是request的隊列模式
scrapy-redis默認的請求隊列形式(有自己的優先級順序)
是按照redis的有序集合排序出隊列的

#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue"

隊列形式,請求先進先出

#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderQueue"

使用了棧的形式,請求先進後出

#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderStack"
ITEM_PIPELINES = { 
	'example.pipelines.ExamplePipeline': 300, 'scrapy_redis.pipelines.RedisPipeline': 400,
}

指定要存儲的redis的主機的ip,默認存儲在127.0.0.1

REDIS_HOST = 'redis的主機的ip'

定要存儲的redis的主機的port,默認6379

REDIS_PORT = '6379'

導入 from scrapy_redis.spiders import RedisCrawlSpider

這個RedisCrawlSpider類爬蟲繼承了RedisCrawlSpider,能夠支持分佈式的抓取。
因爲採用的是crawlSpider,所以需要遵守Rule規則,
以及callback不能寫parse()方法。
同樣也不再有start_urls了,取而代之的是redis_key,
scrapy-redis將key從Redis裏pop出來,成爲請求的url地址。

注意:
同樣的,RedisCrawlSpider類不需要寫start_urls:

  • scrapy-redis 一般直接寫allowd_domains來指定需要爬取的域,也可以從在構造方法__init__()裏動態定義爬蟲爬取域範圍(一般不用)。
  • 必須指定redis_key,即啓動爬蟲的命令,參考格式:redis_key = ‘myspider:start_urls’
  • 根據指定的格式,start_urls將在 Master端的 redis-cli 裏 lpush 到 Redis數據庫裏,RedisSpider 將在數據庫裏獲取start_urls。
    執行方式

1.通過runspider方法執行爬蟲的py文件(也可以分次執行多條),爬蟲(們)將處於等待準備狀態:

scrapy runspider myspider_redis.py

或者

scrapy crawl myspider_redis

2 .在Master端的redis-cli輸入push指令,參考格式(指定起始url):

lpush myspider:start_urls http://www.dmoz.org/

3.Slaver端爬蟲獲取到請求,開始爬取。

scrapy和scrapy-redis有什麼區別?爲什麼選擇redis數據庫?

1) scrapy是一個Python爬蟲框架,爬取效率極高,具有高度定製性,但是不支持分佈式。而scrapy-redis一套基於redis數據庫、運行在scrapy框架之上的組件,可以讓scrapy支持分佈式策略,Slaver端共享Master端redis數據庫裏的item隊列、請求隊列和請求指 紋集合。

2) 爲什麼選擇redis數據庫,因爲redis支持主從同步,而且數據都是緩存在內存中的,所以基於redis的分佈式爬蟲,對請求和數據的高頻讀取效率非常高。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章