您的位置:首页 > 数据库 > Redis

分布式爬虫scrapy-redis

2019-01-24 18:49 183 查看

分布式爬虫Scrapy-Redis

分布式爬虫是由一组通过网络进行通信、为了完成共同的爬虫任务而协调工作的计算机节点组成的系统。分布式爬虫是将多台主机组合起来,共同完成一个爬取任务,大大提高爬取效率。

调度器扩展多个,对应的下载器也扩展多个,但是保证爬取的队列是惟一的,也就是共享爬取队列。并且应该要保证,一个调度器调度一个请求以后,其他调度器不会重复调度这个请求。

Scrapy-Redis

Scrapy 是一个通用的爬虫框架,但是不支持分布式,Scrapy-redis是为了更方便地实现Scrapy分布式爬取,而提供了一些以redis为基础的组件。安装如下:

pip install scrapy-redis

Scrapy-redis提供了下面四种组件(components):(四种组件意味着这四个模块都要做相应的修改)

  1. Scheduler(调度器)
  2. Duplication Filter(去重)
  3. Item Pipeline(管道)
  4. Base Spider(爬虫类)
安装reids
pip install redis
修改redis配置文件redis.windows.conf

修改 bind 127.0.0.1 为 bind 0.0.0.0 ,这样Slave端才能远程连接到Master端的Redis数据库。

测试Slave端远程连接Master端

Slave端启动redis-cli -h master端ip, -h 参数表示连接到指定主机的redis数据库 。

实现分布式步骤

Scrapy-Redis分布式的实现是较为简单的,核心步骤只需三步:

  • 将爬虫主文件中继承自Scrapy中的scrapy.Spider 或 CrawlSpider 替换成 Scrapy-Redis的 RedisSpider 或 RedisCrawlSpider。

  • 初始的start_urls改为redis_key。

  • 在settings.py文件中修改Scrapy自带的调度器类和去重类为Scrapy-Redis提供的类

    SCHEDULER = "scrapy_redis.scheduler.Scheduler"
    
    DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
    
    SCHEDULER_PERSIST = True
  • 在settings.py文件中配置Redis(两种方式)

  1. 单独配置(Scrapy-Redis优先使用)
REDIS_URL = redis://[password]@host:port
  1. 分开配置
# redis master端ip
REDIS_HOST = '127.0.0.1'
# redis master端的端口
REDIS_PORT = 6379
# redis master端的密码 'foobared'  是redis的默认密码
REDIS_PASSWORD = 'foobared'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: