运行流程
为什么使用redis数据库?reids数据库完成了什么功能?
- redis数据库是基于内存的存储,读写的效率高。redis数据库有丰富的数据类型(string、hash、list、set、zset)
- 实现了去重,实现了调度器的队列和数据的存储
实现分布式爬虫的流程和步骤
1、第一步需要设置settings中的配置
#设置去重组件,使用的是scrapy-redis的去重组件,而不再是scrapy框架自己的去重组件了
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
#设置调度器,使用的是scrapy-redis重写的调度器,不在使用scrapy自带调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
#可以实现断点爬取(请求的记录不会消失,会存储在redis数据库中,不会清楚redis的任务队列)
SCHEDULER_PERSIST = True
#设置调度器任务队列的模式
SCHEDULER_QUEUE是scrapy-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,
#实现这个管道,可以将爬虫端获取的item数据,统一保存在redis数据库中
'scrapy_redis.pipelines.RedisPipeline': 400,
}
LOG_LEVEL = 'DEBUG'
Introduce an artifical delay to make use of parallelism. to speed up the crawl.
DOWNLOAD_DELAY = 1
#指定要存储的redis数据库的主机ip
REDIS_HOST = '127.0.0.1'
#指定redis数据库主机的端口
REDIS_PORT = 6379
2、实现crawlSpider的分布式爬虫
-
step1:导入RedisCrawlSpider
from scrapy_redis.spiders import RedisCrawlSpider -
step2:修改爬虫文件继承的类
class MyCrawler(RedisCrawlSpider) -
step3:添加redis_key(根据redis_key从redis数据库中获取起始任务)
redis_key = ‘爬虫名称:start_urls’
注意:需要将原来的start_urls去重其他代码照常不变
3、实现scrapy.spider的分布式爬虫
-
step1:导入RedisSpider
from scrapy_redis.spiders import RedisSpider -
step2:修改爬虫文件继承的类
class MySpider(RedisSpider): -
step3:添加redis_key(根据redis_key从redis数据库中获取起始任务)
redis_key = ‘爬虫名称:start_urls’
注意:需要将原来的start_urls去重其他代码照常不变