注意事项:在阅读本文之前,必须具备使用scrapy编写爬虫的能力。
使用scrapy框架就可以快速开发一个爬虫,如果针对一个大型的网站,单机爬虫就会显得心有余而力不足。那么有没有便捷的办法是单机爬虫转换为分布式爬虫呢?
首先需要了解单机爬虫与分布式爬虫的区别:
我们先来查看两张思维导图:
scrapy 框架实现原理
scrapy_redis 框架实现原理
在上述两张图示中我们可以看到scrapy_redis只是在scrapy的基础之上多了一个redis数据库,正是因为多了redis数据库才是我们能够在scrapy爬虫的基础之上创造出分布式爬虫。
scrapy_redis在redis的基础之上拓展了四个组件,分别如下:
Scheduler
Scrapy改造了python本来的collection.deque(双向队列)形成了自己的Scrapy queue ,scrapy_redis把Scrapy queue换成redis数据库(也是指redis队列),从同一个redis-server存放要爬取的request,便能让多个spider去同一个数据库里读取。
Duplication Filter
Scrapy中用集合实现这个request去重功能,Scrapy中把已经发送的request指纹放入到一个集合中,把下一个request的指纹拿到集合中比对,如果该指纹存在于集合中,说明这个request发送过了,如果没有则继续操作。
在scrapy_redis中去重是由Duplication Filter组件来实现的,它通过redis的set 不重复的特性ÿ