美文网首页
(三)分布式爬虫(1)——scrapy-redis简介

(三)分布式爬虫(1)——scrapy-redis简介

作者: 爱折腾的胖子 | 来源:发表于2018-09-26 21:18 被阅读0次

    scrapy-redis并不算是一套框架,是scrapy框架的部分功能通过redis进行实现,是一种组件。

    scrapy-redis.png
    首先分析一下这张图,和scrapy的流程图很像,
    Scrapy运行流程:

    1.Spider把需要爬取的页面URL给Engine。
    2.Engine把URL放入Scheduler中,给Scheduler处理。
    3.Scheduler把请求放入redis中,进行指纹比对,保证url不重复。如果有指纹,则url被舍弃,反之进队列。
    4.Scheduler从redis的请求队列取出url。
    5.Scheduler把取出的url请求传入Engine中。
    5.Engine把request传入Downloader中,让它发送请求到目标网站。
    5.Downloader把从服务器上接收到的response传入Engine中。
    6.Engine把接收到的response传入Spider中,供其提取数据。
    7.Spider把提取到的数据和下一条待爬取的URL传入Engine中。
    8.Engine把接收到的数据传递给Item Pipelines、把下一条待爬取的URL传入Scheduler中进行处理。
    9.Item Pipeline把需要入库的数据,统一存储到redis数据库中。
    10.Item Process从redis数据库中取数据,然后再进行数据的持久化操作。

    这个流程一直循环运行,直到redis中没有任何一条待爬取的URL,整个程序会停止。


    上述过程中,redis需要三个库:

    第一个是url库,存放待爬取的url。
    第二个是指纹库,用来进行url指纹比对,保证url唯一性。
    第三个是item数据库,以便进行数据统一存储。


    scrapy-redis中有四个重要的组件:

    1.Scheduler:由于scrapy本身的scheduler与scrapy queue不支持分布式,需要通过redis数据库进行统一的url存储,所以需要使用scrapy-redis重写的scheduler。
    2.Duplication Filter:scrapy通过集合的方式进行url去重,scrapy-redis是用Duplication Filter组件实现的,通过redis的set的不重复性实现了url去重。
    3.Item Pipeline:scrapy的pipeline一般都是做最后的数据处理实现数据持久化,scrapy-redis中多了一步操作,首先把数据统一存放到redis中,然后再把数据统一进行持久化操作。
    4.Base Spider:scrapy-redis不再使用原有的Spider类,重写的RedisSpider类继承了Spider和RedisMixin两个类,实现了爬虫和从redis读数据的功能。

    相关文章

      网友评论

          本文标题:(三)分布式爬虫(1)——scrapy-redis简介

          本文链接:https://www.haomeiwen.com/subject/vcgroftx.html