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,我们可以方便地实现分布式爬虫,并提高爬虫的效率和稳定性。