scrapy_redis分布式爬虫总结
scrapy_redis:Scrapy_redis在scrapy的基础上实现了更多,更强大的功能,具体体现在:reqeust去重,爬虫持久化,和轻松实现分布式
使用scrapy_redis好处
reqeust去重,爬虫持久化,和轻松实现分布式
提供了下面四种组件
- Scheduler
- Duplication Filter
- Item Pipeline
- Base Spider
安装:
pip3 install scrapy-redis
Scrapy_redis是工作流程
第一步: 启动Redis
首先需要把Redis启动起来。使用Mac OS/Linux的可以在终端下面输入以下命令并回车: redis-server
使用Windows的,在CMD中cd进入存放Redis的文件夹,并运行:
redis-server.exe
第二步: 修改爬虫
在前面的课程中,我们爬虫是继承自scrapy.Spider这个父类。这是Scrapy里面最基本的一个爬虫类,只能实现基本的爬虫功能。现在需要把它替换掉,从而实现更高级的功能。
请对比一下下面这段使用了Scrapy_redis的代码与前面read color网站爬虫的代码头部有什么不同:
from scrapy_redis.spiders import RedisSpider
class ReadColorSpider(RedisSpider):name ="readcolorspider"
redis_key ='readcolorspider:start_urls'
可以看出,这里爬虫的父类已经改成了RedisSpider,同时多了一个:
redis_key='readcolorspider:start_urls'
这里的redis_key实际上就是一个变量名,之后爬虫爬到的所有URL都会保存到Redis中这个名为==“readcolorspider:start_urls”==的列表下面,爬虫同时也会从这个列表中读取后续页面的URL。这个变量名可以任意修改。
除了这两点以外,在爬虫部分的其他代码都不需要做修改。
实际上,这样就已经建立了一个分布式爬虫,只不过现在只有一台电脑。
第三步: 修改设置
现在已经把三轮车换成了挖掘机,但是Scrapy还在按照指挥三轮车的方式指挥挖掘机,所以挖掘机还不能正常工作。因此修改爬虫文件还不行,Scrapy还不能认识这个新的爬虫。现在修改settings.py。
(1)Scheduler
首先是Scheduler的替换,这个东西是Scrapy中的调度员。在settings.py中添加以下代码:
Enables scheduling storing requests queue in redis.
SCHEDULER="scrapy_redis.scheduler.Scheduler"
(2)去重
Ensure all spiders share same duplicates filter through redis.
DUPEFILTER_CLASS="scrapy_redis.dupefilter.RFPDupeFilter"
设置好上面两项以后,爬虫已经可以正常开始工作了。不过还可以多设置一些东西使爬虫更好用。
(3)不清理Redis队列
Don't cleanup redis queues, allows to pause/re