scrapy和scrapy-redis有什么区别?为什么选择redis数据库?

scrapy和scrapy-redis有什么区别?为什么选择redis数据库?

 

一、主要区别

  1. scrapy是一个Python爬虫框架,爬取效率极高,具有高度定制性,但是不支持分布式
  2. scrapy-redis一套基于redis数据库、运行在scrapy框架之上的组件,可以让scrapy支持分布式策略,Slaver端共享Master端redis数据库里的item队列、请求队列和请求指纹集合。

二、为什么选择redis数据库,

  1. 因为redis支持主从同步,而且数据都是缓存在内存中的,所以基于redis的分布式爬虫,对请求和数据的高频读取效率非常高。
  2. 你用过的爬虫框架或者模块有哪些?谈谈他们的区别或者优缺点 ?

            Python自带:urllib,urllib2

            第 三 方:requests

            框    架:Scrapy

     3. urllib和urllib2模块都做与请求URL相关的操作,但他们提供不同的功能。

           urllib2.:urllib2.urlopen可以接受一个Request对象或者url,(在接受Request对象时候,可以设置一个URL headers),

           urllib.urlopen只接收一个url

           urllib 有urlencode,urllib2没有,因此总是urllib,urllib2常会一起使用的原因

三、scrapy框架

  1. scrapy是封装起来的框架,他包含了下载器,解析器,日志及异常处理,基于多线程, twisted的方式处理 。
  2. 对于固定单个网站的爬取开发,有优势,但是对于多网站爬取 100个网站,并发及分布式处理方面,不够灵活,不便调整与括展。
  3. request 是一个HTTP库, 它只是用来,进行请求,对于HTTP请求,他是一个强大的库,下载,解析全部自己处理,灵活性更高,高并发与分布式部署也非常灵活,对于功能可以更好实现.

四、Scrapy优缺点:

      1. 优点:

                 scrapy 是异步的

                 采取可读性更强的xpath代替正则

                 强大的统计和log系统

                 同时在不同的url上爬行

                 支持shell方式,方便独立调试

                 写middleware,方便写一些统一的过滤器

                 通过管道的方式存入数据库

     2. 缺点:

                基于python的爬虫框架,扩展性比较差

                基于twisted框架,运行中的exception是不会干掉reactor,

               并且异步框架出错后是不会停掉其他任务的,数据出错后难以察觉。

 

 

你可能感兴趣的:(scrapy框架)