scrapy是一个分布式的爬虫框架,如果像普通爬虫一样使用,那么毫无意义,如果要使用分布式爬虫,那么就需要配置Redis
安装及使用
在终端中使用 pip install scrapy_redis 即可安装 pip 会自动安装以来
使用Redis缓存网页并自动去重
由于Scrapy_redis已经封装了大部分的流程,所以我们使用它不会有任何难度。
- 启动redis
在Windows系统中,通过CMD的cd命令进入存放Redis的文件夹,并运行: redis-server.exe 2. 修改爬虫
在前面的代码中,爬虫继承自scrapy.Spider这个父类。这是Scrapy里面最基本的一个爬虫类,只能实现基本的爬虫功能。现在需要把它替换掉,从而实现更高级的功能。首先需要导入支持Redis的爬虫父类并使用: from scrapy_redis.spiders import RedisSpiderclass Exercise114Spider(RedisSpider): name = “exercise11_4” `redis_key = ‘exercisell4spider : start_urls’
这里的redis_key实际上就是一个变量名,之后爬虫爬到的所有URL都会保存到Redis中这个名为“exercise114spider:start_urls”的列表下面,爬虫同时也会从这个列表中读取后续页面的URL。这个变量名可以任意修改,里面的英文冒号也不是必需的。不过一般习惯上会写成“爬虫名:start_urls”这种形式,这样看到名字就知道保存的是什么内容了。
此时已经建立了一个分布式爬虫,只不过现在只有一台计算机。
修改设置
爬虫已经被修改成分布式了,但是还差一步,还需要修改setting
- 修改scheduler
首先是调度Scheduler的替换。这是Scrapy中的调度员。在settings.py中添加以下代码 #Enables scheduling storing requests queue in redis.SCHEDULER = "scrapy_redis.scheduler.Scheduler" - 去重
# Ensure all spiders share same duplicates filter through redis.DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter" - 修改调度
- 队列
SCHEDULER_QUEUE_CLASS = ‘scrapy_redis.queue.SpiderQueue’ - 栈
SCHEDULER_QUEUE_CLASS = ‘scrapy_redis.queue.SpiderStack’ - 优先级队列
SCHEDULER_QUEUE_CLASS = ‘scrapy_redis.queue.SpiderPriorityQueue’ - 不清理Redis队列
crawls.SCHEDULER_PERSIST =True
如果这一项为True,那么Redis中的URL不会被Scrapy_redis清理掉。这样的好处是,爬虫停止了再重新启动,它会从上次暂停的地方开始继续爬取。如果设置成了False,那么Scrapy_redis每一次读取了URL以后,就会把这个URL删除。爬虫暂停以后再重新启动,它会重新开始爬。由于现在的爬虫和Redis在同一台计算机上面运行,所以可以不需要配置Redis的信息。Scrapy_redis会默认Redis就运行在现在这台计算机上,IP和端口也都是默认的127.0.0.1和6379。
果Redis不在本地的话,就需要将它们写出来
REDIS_HOST = '127.0.0.1’
REDIS_PORT = 6379
|