Scrapy-Redis 是 Scrapy 的一个插件,它可以让 Scrapy 支持分布式爬虫。Scrapy-Redis 通过 Redis 来实现分布式爬虫的任务队列和爬取结果数据的存储,从而提高爬虫的效率和稳定性。
scrapy-redis 是一个用于将 Scrapy 分布式爬虫与 Redis 数据库相结合的库,可以使得多个 Scrapy 爬虫实例共享爬取任务队列和爬取结果数据等信息。下面是 scrapy-redis 的用法举例:
安装 scrapy-redis,可以通过以下命令来安装 scrapy-redis:
pip install scrapy-redis
假设我们要爬取豆瓣电影 TOP250 的电影信息,并将电影的名称、评分和导演等信息存储到 Redis 数据库中,我们可以按照以下步骤来实现:
1、创建一个 Scrapy 项目
scrapy startproject douban
2、修改 settings.py 文件,启用 scrapy-redis:
# 启用 scrapy-redis 的调度器 SCHEDULER = "scrapy_redis.scheduler.Scheduler" # 启用 scrapy-redis 的去重器 DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter" # 启用 scrapy-redis 的 Redis 连接 REDIS_URL = 'redis://localhost:6379'
3、创建一个 Spider:修改 Scrapy 爬虫的 spider.py 文件,将爬虫类继承自 scrapy-redis 的 RedisSpider。
import scrapy from scrapy_redis.spiders import RedisSpider class DoubanSpider(RedisSpider): name = 'douban' redis_key = 'douban:start_urls' def start_requests(self): urls = [ 'https://movie.douban.com/top250' ] for url in urls: yield scrapy.Request(url=url, callback=self.parse) def parse(self, response): # 获取电影列表 movie_list = response.xpath('//div[@class="hd"]') for movie in movie_list: # 获取电影名称 name = movie.xpath('.//span[@class="title"]/text()').get() # 获取电影评分 score = movie.xpath('.//span[@class="rating_num"]/text()').get() # 获取电影导演 director = movie.xpath('.//span[@class="other"]/text()').get() yield { 'name': name, 'score': score, 'director': director, }
4、运行 Redis 数据库:
命令行:
redis-server
5、启动爬虫:
scrapy crawl douban
以上代码实现了一个简单的分布式爬虫,它会将豆瓣电影 TOP250 的电影信息存储到 Redis 数据库中。在这个实例中,我们通过 RedisSpider 来继承 Redis 的调度器和去重器,使用 Redis 数据库来存储爬虫的任务队列和爬取结果数据。通过 scrapy-redis,我们可以方便地实现分布式爬虫,并提高爬虫的效率和稳定性。