scrapy_redis分布式爬虫总结

一,scrapy_redis分布式爬虫图解

scrapy_redis分布式爬虫总结

二、scrapy-redis实现scrapy分布式爬取分析的原理

scrapy-redis原理:
1.spider解析下载器下载下来的response,返回item或者是links
2.item或者links经过spidermiddleware的process_spider_out()方法,交给engine。
3.engine将item交给itempipeline,将links交给调度器
4.在调度器中,先将request对象利用scrapy内置的指纹函数,生成一个指纹对象
5.如果request对象中的dont_filter参数设置为False,并且该request对象的指纹不在信息指纹的队列中,那么就把该request对象放到优先级的队列中
6.从优先级队列中获取request对象,交给engine
7.engine将request对象交给下载器下载,期间会通过downloadmiddleware的process_request()方法
8.下载器完成下载,获得response对象,将该对象交给engine,期间会通过downloadmiddleware的process_response()方法
9.engine将获得的response对象交给spider进行解析,期间会经过spidermiddleware的process_spider_input()方法
10.从第一步开始循环

上面的十个步骤就是scrapy-redis的整体框架,与scrapy相差无几。本质的区别就是,将scrapy的内置的去重的队列和待抓取的request队列换成了redis的集合。就这一个小小的改动,就使得了scrapy-redis支持了分布式抓取。

三、需要用到的模块

scrapy

  • scrapy-redis
  • redis
  • mysql :收集来的数据存放到mysql中
  • python的mysqldb模块
  • python的redis模块
    后面俩个库:python不能直接操作数据库,需要通过库来支持。而这2个就是相应数据库的支持库。
    结构化数据可以使用mysql节省空间,非结构化、文本等数据可以采用mongodb等非关系型数据提高访问速度。

一. redis特性

1.丰富的数据类型与相应操作。每种数据类型都有特定的应用场景。
2.性能极高。
3.功能丰富。提供的进阶特性能够满足数据库使用需求。

二. redis数据结构

包括string/hash/list/set/zset,针对每种结构的使用情景可见文章:redis之其中武器。
hash特点就是在string基础上可实现单个key的多个filed的存储;list就不用说了,就是双向链表的特性。set就是集合,它和list的区别体现在value的有序性和唯一性上,操作上更贴近集合的概念,提供交集、并集等。zset相比set多了一个score项,并利用其实现value的排序。

三. redis进阶特性

1.事物。一组命令的集合。
2.生存时间。可用来实现缓存。
3.排序。
4.任务队列。
5.管道。